题目描述
有一个薪水表,salaries 简况如下:
建表语句如下:
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
请你查找薪水变动超过 15 次的员工号 emp_no 以及对其对应的变动次数 t ,上述示例查询结果如下:
答案解析
根据分析题目与示例的查询结果,我们可以知道题目的隐含信息:
- 从第一条记录起,即算一次涨幅
- 如果多条记录的 SALARY 字段值相同,那么理应仅算一次涨幅
我们可以使用 分组(GROUP BY ) + 聚合函数(COUNT()) 来解决本问题
同时因为,我们要去除同一位员工 SALARY 相同的记录,所以需要使用 DISTINCT 语句
_SQL 语句如下:
SELECT emp_no,COUNT(DISTINCT salary) AS t
FROM salaries
GROUP BY emp_no
HAVING t > 15;