MySQL使用COUNT别名作为WHERE条件报错Unknown column的解决咨询
解决WHERE子句无法使用COUNT别名过滤的问题
嘿,这个问题我之前也碰到过!你遇到的错误是因为WHERE子句的执行时机在聚合函数(比如COUNT)计算之前,这时候你定义的别名total_submissions还没被数据库生成,所以它自然找不到这个列啦。
要基于聚合计算结果过滤分组后的结果,你需要用HAVING子句——它是专门用来在聚合完成后过滤分组数据的。
修改后的查询语句
把原来放在WHERE里的total_submissions = 5移到HAVING子句中,位置在GROUP BY之后、ORDER BY之前:
SELECT SQL_CALC_FOUND_ROWS patient.*, COUNT(patient_data.id) AS total_submissions FROM patient LEFT JOIN patient_data ON (patient_data.patient_id = patient.id AND patient_data.date_finished IS NOT NULL) WHERE patient.doc_id = 2 GROUP BY patient.id HAVING total_submissions = 5 ORDER BY patient.id DESC LIMIT 0,40
为什么这样可行?
WHERE:先过滤原始行数据(比如先筛选出doc_id=2的患者),再进行分组和聚合计算。HAVING:在分组、聚合计算完成后,再对分组结果进行过滤(这里就是筛选出总提交数等于5的患者分组)。
额外小提示
如果你的MySQL版本是5.7及以上,默认开启了ONLY_FULL_GROUP_BY模式,GROUP BY patient.id能生效的前提是patient.id是表的主键(因为主键可以唯一确定patient.*的所有列)。如果不是主键,你可能需要把patient.*里的所有列都加到GROUP BY里,或者调整查询逻辑哦。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

