2017-02-17 90 views
-1

要求:僅使用一個查詢來顯示每個部門及其員工數量(兩個表,部門和員工);按僱員人數下降;(對於沒有僱員的部門,仍顯示);對於大小相同的部門,按字母順序按部門名稱排序。我的解決方案不顯示部門沒有員工,也,它沒有顯示在相同數量僱員的字母順序部門:sql,員工和部門

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