统计各个部门对应员工涨幅的次数总和,给出部门编码dept_no、部门名称dept_name以及次数sum
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`));
输入描述:
无
输出描述:
dept_no | dept_name | sum |
---|---|---|
d001 | Marketing | 24 |
d002 | Finance | 14 |
d003 | Human Resources | 13 |
d004 | Production | 24 |
d005 | Development | 25 |
d006 | Quality Management | 25 |
示例1
输入
复制
无
输出
复制
无
--统计各个部门对应员工涨幅的次数总和,给出部门编码dept_no、部门名称dept_name以及次数sum
SELECT
d.dept_no,
dept.dept_name,
count( salary )
FROM
salaries s,
dept_emp d,
departments dept
WHERE
s.emp_no = d.emp_no
AND d.dept_no = dept.dept_no
GROUP BY
dept.dept_no;
--第二种方法
SELECT
de.dept_no,
dp.dept_name,
COUNT( s.salary ) AS sum
FROM
( dept_emp AS de INNER JOIN salaries AS s ON de.emp_no = s.emp_no )
INNER JOIN departments AS dp ON de.dept_no = dp.dept_no
GROUP BY
de.dept_no;
/*解题思路:
使用部门进行分类,而且思考数据中的关系,利用更少的条件,完成检索*/