考虑以下关系模式:
candidates (candidate_id, skill)
[输入表示例]
Select candidate_id
from candidates
group by candidate_id
having sum(if(lower(skill)='python' or lower(skill)='tableau',1,0))=3
我们如何使用聚合函数访问having 子句中的单元格? 我们知道having是在group by之后执行的,因此汇总时数据应该丢失吗? 我错过了什么?
我知道having子句在group by之后执行,因此当group by执行时,行/记录被汇总,单元格中存在的数据应该丢失吗?即使通过聚合函数,我们也不应该能够访问它?
正如 mysql 手册中关于 select 语句 的部分所说:
HAVING 子句可以引用聚合函数,而 WHERE 子句则不能
你的sql语句的having子句引用了聚合函数,所以它符合mysql手册。我确实理解您为什么提出这个问题,因为聚合函数中的条件表达式意味着 mysql 需要对底层数据进行行级访问。但如果聚合函数也不属于选择列表,则 mysql 需要行级访问。