@Erimax

Как ограничить количество через join?

Всем привет.

Есть sql запрос sqlfiddle.com/#!9/773c4b/33 как сделать чтобы с каждый department было только 2 сотрудника?
  • Вопрос задан
  • 258 просмотров
Решения вопроса 2
@Akela_wolf
Extreme Programmer
Если MySQL 8-ой версии, то он научился в window functions, поэтому можно так:
WITH tmp AS (SELECT department.name as department_name, employee.name, ROW_NUMBER() OVER (PARTITION BY department_id) AS rownum
FROM employee LEFT JOIN department
ON employee.department_id = department.id)
SELECT * FROM tmp
WHERE rownum <= 2


Полный пример
Ответ написан
@Akina
Сетевой и системный админ, SQL-программист.
хотелось бы посмотреть на версию mysql 5.7


Ну например так:
SELECT department.name as department_name, 
       employee.name
FROM employee 
JOIN department ON employee.department_id = department.id 
WHERE 2 > ( SELECT COUNT(*)
            FROM employee emp
            WHERE emp.department_id = employee.department_id
              AND emp.id < employee.id )

Ну или так:
SELECT department.name as department_name, 
       subquery.name
FROM department
JOIN ( SELECT employee.*,
              @row_number := CASE WHEN @department = department_id
                                  THEN @row_number + 1
                                  ELSE 1
                                  END rownumber,
              @department := department_id
       FROM employee
       CROSS JOIN ( SELECT @department:=0, @row_number:=0 ) variables
       ORDER BY department_id, id ) subquery ON subquery.department_id = department.id
WHERE subquery.rownumber <= 2


fiddle
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы