数据库SQL实战(牛客网):查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次
查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t 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 )); select emp_no , count ( emp_no ) as t from salaries group by emp_no having t > 15 ; 1、用COUNT()函数和GROUP BY语句可以统计同一emp_no值的记录条数 2、根据题意,输出的涨幅次数为t,故用AS语句将COUNT(emp_no)的值转换为t 3、由于COUNT()函数不可用于WHERE语句中,故使用HAVING语句来限定t>15的条件 4、最后存在一个理解误区,涨幅超过15次,salaries中相应的记录数应该超过16(从第2条记录开始算作第1次涨幅),不过题目为了简单起见,将第1条记录当作第1次涨幅,所以令t>15即可 /** 注意: 严格来说,下一条salary高于本条才算涨幅,但本题只要出现了一条记录就算一次涨幅,salary相同可以理解为涨幅为0,salary变少理解为涨幅为负 **/ 来源: