题目描述
有一个薪水表,salaries
简况如下:
请你查找薪水记录超过 15 次的员工号 emp_no
以及其对应的记录次数 t
,以上例子输出如下:
考察知识点
GROUP BY
,HAVING
。
解题思路
1️⃣ 根据题目要求,首先明确查询的结果中包含 emp_no
,以及变动次数 t
。使用 count
函数和 group by
分组可以统计变动次数。
SELECT emp_no, count(salary) t
FROM salaries
GROUP BY emp_no
HAVING t > 15
2️⃣ 之前题目是要求统计涨薪超过 15 次员工 emp_no
和次数 t
,所以上面的肯定是行不通的,真正的涨幅一般都是正数,并且第二次开始才算一次涨幅,所以应该按照下面的写法来查询。
SELECT s1.emp_no, COUNT(s1.salary) AS t
FROM salaries AS s1 INNER JOIN salaries AS s2
ON s1.emp_no = s2.emp_no AND s1.to_date = s2.from_date
WHERE s1.salary < s2.salary
GROUP BY s1.emp_no
HAVING t > 15
题目来源:牛客网-SQL数据库实战题
✅ 每日打卡,❤ 点个赞再走吧!!!❤
后续会继续分享 Mysql 方面的文章,如果感兴趣的话可以点个关注不迷路哦~。