【365天】我愛刷題系列124(2018.02.05)

叨叨兩句

  1. ~

SQL習題019

1

題目描述
彙總各個部門當前員工的title類型的分配數目,結果給出部門編號dept_no、dept_name、其當前員工全部的title以及該類型title對應的數目count
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 IF NOT EXISTS "titles" (
emp_no int(11) NOT NULL,
title varchar(50) NOT NULL,
from_date date NOT NULL,
to_date date DEFAULT NULL);測試

本題的關鍵在於用 GROUP BY 同時對 de.dept_no 和 t.title 進行分組,具體思路以下:
一、先用 INNER JOIN 鏈接 dept_emp 與 salaries,根據測試數據添加限定條件 de.to_date = '9999-01-01' AND t.to_date = '9999-01-01',即當前員工的當前頭銜
二、再用 INNER JOIN 鏈接departments,限定條件爲 de.dept_no = dp.dept_no,即部門編號相同
三、最後用 GROUP BY 同時對 de.dept_no 和 t.title 進行分組,用 COUNT(t.title) 統計相同部門下相同頭銜的員工個數

SELECT de.dept_no, dp.dept_name, t.title, COUNT(t.title) AS count
FROM titles AS t INNER JOIN dept_emp AS de 
ON t.emp_no = de.emp_no AND de.to_date = '9999-01-01' AND t.to_date = '9999-01-01'
INNER JOIN departments AS dp 
ON de.dept_no = dp.dept_no
GROUP BY de.dept_no, t.title
相關文章
相關標籤/搜索