sql,员工和部门

时间:2017-02-17 20:30:51

标签: mysql 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;

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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