首页 > 试题广场 >

统计各个部门的工资记录数

[编程题]统计各个部门的工资记录数
  • 热度指数:348578 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个部门表departments简况如下:
dept_no dept_name
d001 Marketing
d002
Finance


有一个,部门员工关系表dept_emp简况如下:
emp_no
dept_no 
from_date 
to_date
10001 d001
2001-06-22 9999-01-01
10002 d001
1996-08-03 9999-01-01
10003 d002
1996-08-03 9999-01-01

有一个薪水表salaries简况如下:
emp_no 
salary
from_date 
to_date
10001
85097 2001-06-22
2002-06-22
10001 88958 2002-06-22 9999-01-01
10002
72527 1996-08-03
9999-01-01
10003
32323 1996-08-03 9999-01-01


请你统计各个部门的工资记录数,给出部门编码dept_no、部门名称dept_name以及部门在salaries表里面有多少条记录sum,按照dept_no升序排序,以上例子输出如下:
dept_no dept_name sum
d001 Marketing 3
d002 Finance 1
示例1

输入

drop table if exists  `departments` ; 
drop table if exists  `dept_emp` ; 
drop table if exists  `salaries` ; 
CREATE TABLE `departments` (
`dept_no` char(4) NOT NULL,
`dept_name` varchar(40) NOT NULL,
PRIMARY KEY (`dept_no`));
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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 departments VALUES('d001','Marketing');
INSERT INTO departments VALUES('d002','Finance');
INSERT INTO dept_emp VALUES(10001,'d001','2001-06-22','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_emp VALUES(10003,'d002','1996-08-03','9999-01-01');
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','9999-01-01');
INSERT INTO salaries VALUES(10003,32323,'1996-08-03','9999-01-01');

输出

d001|Marketing|3
d002|Finance|1
头像 超超i7宝
发表于 2020-11-17 19:54:47
SELECT d.dept_no, d.dept_name, count(s.salary) AS SUMFROM departments d JOIN dept_emp de ON d.dept_no = de.dept_noJOIN salaries s ON de.emp_no = s.emp 展开全文
头像 此用户名涉嫌违规
发表于 2021-03-12 17:36:50
题目描述:统计各个部门的工资记录数,给出部门编码dept_no、部门名称dept_name以及部门在salaries表里面有多少条记录sum,按照dept_no升序排序。代码: select d.dept_no,d.dept_name,count(*) as sum from (department 展开全文
头像 毛小兔
发表于 2020-09-07 21:16:08
先从【部门员工关系表/工资表】筛选出【部门ID】【工资记录数】再关联出【部门名称】 使用到:1.聚合函数,group by2.左连接,left join3.行数,count() select a.dept_no,a.dept_name,r.sum from departments a left jo 展开全文
头像 高质量搬砖人
发表于 2021-01-30 09:57:41
方法)三表连结再分组使用聚合函数 SELECT d.dept_no, d.dept_name, COUNT(s.emp_no) FROM dept_emp AS de, departments AS d, salaries AS s WHERE de.dept_no = d.dept_no AND 展开全文
头像 Java编程白哥
发表于 2023-03-12 23:49:35
方法一:思路:这里三表 join,根据部门编号 dept_no 和部门名称 dept_name 分组,用 count 聚合出结果即可。代码: select ds.dept_no, ds.dept_name, count(salary) sum from departm 展开全文
头像 jiang_dr
发表于 2021-10-11 11:48:29
思路:这题可以有三种解法。 第一二种类似,区别在于第一种方法是使用left join,第二种使用 inner join,其实区别并不大,酌情使用即可 -- 方法一: select dp.dept_no, dp.dept_name, count(s.salary) as sum from salar 展开全文
头像 LY_coder
发表于 2021-11-17 11:51:29
*将两张小表连接为新表 t,salaries表和新表 t 连接 select t.dept_no,t.dept_name,count(t.dept_name) as sum from salaries s,(select de.emp_no,de.dept_no,d.dept_name &n 展开全文
头像 阿蘭
发表于 2021-11-26 21:25:52
SELECT d.dept_no ,d.dept_name, count(s.salary) AS sum FROM salaries s JOIN dept_emp de USING (emp_no) JOIN departments d USING (dept_no) GRO 展开全文
头像 DAMES
发表于 2022-09-26 23:26:05
select dp.dept_no dept_no ,dp.dept_name dept_name ,count(s.salary) sum from dept_emp d left join salaries s on d.emp_no=s.emp_no left join departments 展开全文
头像 rubyrubylulu
发表于 2022-04-25 16:22:13
select departments.*,count(salaries.salary)as sum from departments right join dept_emp on departments.dept_no=dept_emp.dept_no  left join salarie 展开全文