Group by 和having 子句

问题描述 投票:0回答:1

考虑以下关系模式:

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 group-by having
1个回答
0
投票

正如 mysql 手册中关于 select 语句 的部分所说:

HAVING 子句可以引用聚合函数,而 WHERE 子句则不能

你的sql语句的having子句引用了聚合函数,所以它符合mysql手册。我确实理解您为什么提出这个问题,因为聚合函数中的条件表达式意味着 mysql 需要对底层数据进行行级访问。但如果聚合函数也不属于选择列表,则 mysql 需要行级访问。

© www.soinside.com 2019 - 2024. All rights reserved.