要求:仅使用一个查询向每个部门显示其员工人数(两个表,部门和员工);按员工人数减少的顺序;(对于没有员工的部门,仍然显示);对于具有相同大小的部门,按部门名称按字母顺序排序。我的解决方案没有显示没有员工的部门,也没有按相同数量的员工按字母顺序显示部门顺序:
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 :(得分: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