首页 > 试题广场 >

查找薪水记录超过15条的员工号emp_no以及其对应的记录次

[编程题]查找薪水记录超过15条的员工号emp_no以及其对应的记录次
  • 热度指数:466873 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个薪水表,salaries简况如下:
emp_no
salary
from_date
to_date
10001 60117 1986-06-26 1987-06-26
10001
62102
1987-06-26
1988-06-25
10001
66074 1988-06-25
1989-06-25
10001
66596 1989-06-25
1990-06-25
10001
66961 1990-06-25
1991-06-25
10001
71046 1991-06-25
1992-06-24
10001
74333 1992-06-24
1993-06-24
10001
75286 1993-06-24
1994-06-24
10001
75994 1994-06-24
1995-06-24
10001
76884 1995-06-24
1996-06-23
10001
80013 1996-06-23
1997-06-23
10001
81025 1997-06-23
1998-06-23
10001
81097 1998-06-23
1999-06-23
10001
84917 1999-06-23
2000-06-22
10001
85112 2000-06-22
2001-06-22
10001
85097 2001-06-22 2002-06-22
10002
72527 1996-08-03
1997-08-03

请你查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t,以上例子输出如下:
emp_no t
10001 16

示例1

输入

drop table if exists  `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`));
INSERT INTO salaries VALUES(10001,60117,'1986-06-26','1987-06-26');
INSERT INTO salaries VALUES(10001,62102,'1987-06-26','1988-06-25');
INSERT INTO salaries VALUES(10001,66074,'1988-06-25','1989-06-25');
INSERT INTO salaries VALUES(10001,66596,'1989-06-25','1990-06-25');
INSERT INTO salaries VALUES(10001,66961,'1990-06-25','1991-06-25');
INSERT INTO salaries VALUES(10001,71046,'1991-06-25','1992-06-24');
INSERT INTO salaries VALUES(10001,74333,'1992-06-24','1993-06-24');
INSERT INTO salaries VALUES(10001,75286,'1993-06-24','1994-06-24');
INSERT INTO salaries VALUES(10001,75994,'1994-06-24','1995-06-24');
INSERT INTO salaries VALUES(10001,76884,'1995-06-24','1996-06-23');
INSERT INTO salaries VALUES(10001,80013,'1996-06-23','1997-06-23');
INSERT INTO salaries VALUES(10001,81025,'1997-06-23','1998-06-23');
INSERT INTO salaries VALUES(10001,81097,'1998-06-23','1999-06-23');
INSERT INTO salaries VALUES(10001,84917,'1999-06-23','2000-06-22');
INSERT INTO salaries VALUES(10001,85112,'2000-06-22','2001-06-22');
INSERT INTO salaries VALUES(10001,85097,'2001-06-22','2002-06-22');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'1996-08-03','1997-08-03');

输出

10001|17
头像 N刻后告诉你
发表于 2020-05-19 20:29:37
题目:查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t题目隐含:1.一条记录就算一次涨幅(严格意义上,从第二条记录算起才算一次涨幅)2.任何一条记录都算一次涨幅(严格意义上,必须比上一条记录的工资高才算一次涨幅) 分组+聚合函数select emp_no, count() tfrom 展开全文
头像 城志
发表于 2020-02-17 15:53:41
1. 分析 分组,组内计数 count(emp_no) As t > 15 2. 代码 SELECT emp_no, COUNT(emp_no) AS t FROM salaries GROUP BY emp_no HAVING t > 15;
头像 高质量搬砖人
发表于 2021-01-29 10:41:25
方法)使用GROUP BY子句及聚合函数COUNT得出薪水变动次数大于15的员工 SELECT emp_no, COUNT(emp_no) AS t FROM salaries GROUP BY emp_no HAVING& 展开全文
头像 超超i7宝
发表于 2020-08-10 19:02:20
试了很久 实际上在sqllite在线的编写的环境下测试过后,确实可以得到正确的答案,所以那些想试验 table a table b 的童鞋可以注意一下,可能只是运行环境原因造成报错的~ 上代码:select s1.emp_no, count(s1.emp_no) as tfrom salaries 展开全文
头像 森泽
发表于 2020-11-13 09:13:02
题目:查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t题目隐含:1.一条记录就算一次涨幅(严格意义上,从第二条记录算起才算一次涨幅)2.任何一条记录都算一次涨幅(严格意义上,必须比上一条记录的工资高才算一次涨幅) 分组+聚合函数select emp_no, count() tfrom 展开全文
头像 此用户名涉嫌违规
发表于 2021-03-02 15:24:14
题目要求查找薪水变动超过15次的员工号emp_no以及其对应的变动次数 t 。 个人思路:对emp_no分组可以看到不同emp_no对应的数据。count(distinct salary) as t 计算对应emp_no的不同salary次数另命名为 t。以上为临时表T1作为新的数据源,查询出t&g 展开全文
头像 牛客588483987号
发表于 2021-07-09 15:35:41
 select emp_no,count(emp_no) t from salaries  group by emp_no  having t>15; where 和having 用法: 1、where、聚合函数、having在from后面 展开全文
头像 mg0603
发表于 2021-01-02 10:09:38
题目:查找薪水变动超过15次的员工号emp_no以及其对应的变动次数tTABLE salariesemp_no ,salary ,from_date ,to_date ,要点:“薪水变动次数” t这里针对“薪水变动次数”的衡量可以采取不同方式计算。1)可以对同一emp_no下不同的salary计数。 展开全文
头像 刷题的小蜗牛
发表于 2021-07-04 15:55:17
拿到题目后,我们不要着急一次性写出代码,先将题目进行分解。1、按照员工号进行分组,先算出表中的薪水记录条数,这里使用到 group by、count两个复合函数。 具体的SQL语句: select emp_no,count(emp_no) as countNo from salaries g 展开全文
头像 Ding_123
发表于 2021-10-26 15:47:52
知识点 记录超过15次即count() t,t>15 使用聚合运算按照员工进行分组group by,再使用having进行筛选 select emp_no, count(emp_no) t from salaries group by emp_no having t > 15