2017-02-17 4 views
-1

Требования: использование одного запроса только для отображения каждого отдела с указанием их сотрудников (две таблицы, отдел и сотрудник); порядок по количеству сотрудников уменьшается (для отделов без сотрудников, пока их покажут); для отделов с одинаковым размером, по названию отдела по алфавиту. Мое решение не показывая отделов, без сотрудников, кроме того, он не показывает в алфавитном порядке порядок отделов, когда такое же количество сотрудников:sql, employee and department

SELECT d.DEPT_ID, 
    DEPT_NAME, COUNT(s.STUDENT_ID) as numStudents 
    FROM Departments d, Students s 
    WHERE d.DEPT_ID = s.DEPT_ID 
    GROUP BY d.DEPT_ID 
    ORDER BY numStudents DESC; 

ответ

0

Используйте LEFT JOIN вместо кросс присоединиться вы сейчас делаете.

SELECT d.DEPT_ID, 
d.DEPT_NAME, COALESCE(COUNT(s.STUDENT_ID),0) as numStudents 
FROM Departments d, 
LEFT JOIN Students s 
    ON s.dept_id = d.dept_id 
GROUP BY d.DEPT_ID, d.dept_name 
ORDER BY numStudents DESC, DEPT_NAME; 
0

Для того, чтобы показать, отделы, без студентов, вы должны использовать LEFT JOIN, не крест продукта. И для заказа по имени, когда у них одинаковое количество студентов, вам нужно добавить это в свой пункт ORDER BY.

SELECT d.DEPT_ID, DEPT_NAME, IFNULL(COUNT(s.STUDENT_ID), 0) AS numStudents 
FROM Departments AS d 
LEFT JOIN Students AS s ON d.DEPT_ID = s.DEPT_ID 
GROUP BY d.DEPT_ID 
ORDER BY numStudents DESC, DEPT_NAME 
Смежные вопросы