【352天】我爱刷题系列111(2018.01.23)

@(一只心中无码的程序员)专栏程序员

叨叨两句

  1. ~

SQL习题006

查找薪水涨幅超过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));函数

此题应注意如下四点:
一、用COUNT()函数和GROUP BY语句能够统计同一emp_no值的记录条数
二、根据题意,输出的涨幅次数为t,故用AS语句将COUNT(emp_no)的值转换为t
三、因为WHERE后不可跟COUNT()函数,故用HAVING语句来限定t>15的条件
四、最后存在一个理解误区,涨幅超过15次,salaries中相应的记录数应该超过16(从第2条记录开始算做第1次涨幅),不过题目为了简单起见,将第1条记录看成第1次涨幅,因此令t>15便可
/**  注意: 严格来讲,下一条salary高于本条才算涨幅,但本题只要出现了一条记录就算一次涨幅,salary相同能够理解为涨幅为0,salary变少理解为涨幅为负 **/
1
2
SELECT emp_no, COUNT(emp_no) AS t FROM salaries 
GROUP BY emp_no HAVING t > 15
相关文章
相关标签/搜索