Получите за каждый год, сколько сотрудников (мужчин и женщин) было нанято - PullRequest
0 голосов
/ 06 февраля 2019

Я использую базу данных datacharmer test_db для выполнения этого запроса.(Схема: https://cdn -images-1.medium.com / max / 1200/0 * T4jknBaeaS3y0nKr.png)

Я хочу показать за каждый год, сколько сотрудников, мужчин иженщина, были наняты.Я имею в виду первый раз, когда они были добавлены в отдел.

Это мой запрос, однако я не хочу показывать поле MIN (from_date), есть ли лучшее решение?

SELECT year(from_date) hired_year , COUNT(de.emp_no), MIN(from_date), gender 
FROM dept_emp de
INNER JOIN employees e
ON e.emp_no =  de.emp_no
GROUP BY gender, hired_year
ORDER BY hired_year

Таблица Dept_emp:

emp_no  dept_no from_date   to_date
10010   d004    1996-11-24  2000-06-26
10010   d006    2000-06-26  9999-01-01
10011   d009    1990-01-22  1996-11-09
10012   d005    1992-12-18  9999-01-01
10013   d003    1985-10-20  9999-01-01
10014   d005    1993-12-29  9999-01-01

Ожидаемый результат

year    count   gender
1985    10992   M
1985    7388    F
1986    12134   M
1986    8020    F
1987    12319   M
1987    8115    F
1988    12362   M
1988    8374    F

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вам, вероятно, понадобится дополнительный GROUP BY:

SELECT YEAR(first_date), gender, COUNT(*)
FROM (
    SELECT emp_no, MIN(from_date) AS first_date
    FROM dept_emp
    GROUP BY emp_no
) AS g
JOIN employees AS e ON g.emp_no = e.emp_no
GROUP BY YEAR(first_date), gender

Но я полагаю, вы могли бы просто использовать hire_date, если сотрудник переведен в отдел в тот же день.

0 голосов
/ 06 февраля 2019

Попробуйте это:

SELECT year(de.from_date) hired_year , Count(*) as Count,e.gender
       FROM dept_emp de INNER JOIN 
       employees e
       ON e.emp_no =  de.emp_no
       GROUP BY hired_year,e.gender
       Order BY hired_year;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...