题目要求查找薪水变动超过15次的员工号emp_no以及其对应的变动次数 t 。
个人思路:对emp_no分组可以看到不同emp_no对应的数据。count(distinct salary) as t 计算对应emp_no的不同salary次数另命名为 t。以上为临时表T1作为新的数据源,查询出t>15的结果集.
注意:这道题最大的帮助是让我特意去查了一下MysQL查询的执行顺序:
开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最终结果
select * from ( select emp_no,count(distinct salary) as t from salaries group by emp_no ) as T1 where t>15
二刷: 实际上group by 后面直接加having是可以的。重新复习了一下知识点:
groupby子句常见错误
1)SELECT 子句中只能存在以下三种 元素。
●常数 ● 聚合函数 ● GROUP BY子句中指定的列名(也就是聚合键)
2)where子句中不能使用聚合函数
聚合函数可以再select,having,order by之后出现
where指定分组之前数据行的条件,having子句用来指定分组之后条件
select emp_no,count(distinct salary) as t from salaries group by emp_no HAVING t >15