データベースSQL実戦--20.各部門の従業員の上昇幅に対する回数の合計を統計する

971 ワード

タイトルの説明
                 ,      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`));

解決策
SELECT d.dept_no,dp.dept_name,COUNT(s.salary) sum
FROM dept_emp d 
INNER JOIN salaries s ON d.emp_no = s.emp_no
INNER JOIN departments dp ON d.dept_no = dp.dept_no 
GROUP BY d.dept_no
  • INNER JOINでdept_を接続Empテーブルとsalariesテーブル、dept_emp.Noグループ化、各部門のすべての従業員の給与を統計する記録総数
  • さらに上表をINNER JOINでdepartments表に接続し、制限条件は両表のdept_No等しい、dept_が見つかりましたNoとdept_nameの対応関係、最後にdept_を順次出力no、dept_name、sum