题目描述

有一个薪水表,salaries 简况如下:

查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t - 图1

建表语句如下:

  1. CREATE TABLE `salaries` (
  2. `emp_no` int(11) NOT NULL,
  3. `salary` int(11) NOT NULL,
  4. `from_date` date NOT NULL,
  5. `to_date` date NOT NULL,
  6. PRIMARY KEY (`emp_no`,`from_date`));

请你查找薪水变动超过 15 次的员工号 emp_no 以及对其对应的变动次数 t ,上述示例查询结果如下:

查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t - 图2

答案解析

根据分析题目与示例的查询结果,我们可以知道题目的隐含信息:

  1. 从第一条记录起,即算一次涨幅
  2. 如果多条记录的 SALARY 字段值相同,那么理应仅算一次涨幅

我们可以使用 分组(GROUP BY ) + 聚合函数(COUNT()) 来解决本问题

同时因为,我们要去除同一位员工 SALARY 相同的记录,所以需要使用 DISTINCT 语句

_SQL
语句如下:

  1. SELECT emp_no,COUNT(DISTINCT salary) AS t
  2. FROM salaries
  3. GROUP BY emp_no
  4. HAVING t > 15;