Mysql sql、员工和部门

Mysql sql、员工和部门,mysql,sql,Mysql,Sql,要求:仅使用一个查询来显示每个部门的员工数量(两个表,部门和员工);员工数量减少的订单;(对于没有员工的部门,仍然显示他们);对于相同规模的部门,请按部门名称的字母顺序排序。我的解决方案没有显示没有员工的部门,而且,当员工数量相同时,也没有显示部门的字母顺序: SELECT d.DEPT_ID, DEPT_NAME, COUNT(s.STUDENT_ID) as numStudents FROM Departments d, Students s WHERE d.DEPT

要求:仅使用一个查询来显示每个部门的员工数量(两个表,部门和员工);员工数量减少的订单;(对于没有员工的部门,仍然显示他们);对于相同规模的部门,请按部门名称的字母顺序排序。我的解决方案没有显示没有员工的部门,而且,当员工数量相同时,也没有显示部门的字母顺序:

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;

使用左连接,而不是当前正在进行的交叉连接

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;

为了显示没有学生的部门,您必须使用
左连接
,而不是交叉乘积。当学生人数相同时,要按姓名排序,您需要将其添加到
orderby
子句中

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