我在MySQL中发现了一个问题,请告诉我以下解决方案是否有效,或者是否有更好的解决方案?
select D.DEPT_NAME, COUNT(*)
from Departments D
left outer join STUDENTS S
on S.Dept_ID = D.Dept_ID
group by D.DEPT_NAME
order by 2 desc, 1
学生表包含以下字段:
Student_ID
Student_Name
Gender
Dept_ID
部门表包含以下字段:
Dept_ID
Dept_Name
大学使用两个数据表(Students和Departments)来存储与每个专业相关的学生和系的数据。
- 编写一个查询,打印Departments表中所有系(甚至当前没有学生的系)各自的系名和每个系主修的学生数。
- 按学生人数降序排列结果;如果两个或多个系学生数相同,则按系名称的字母顺序对这些系进行排序。
6条答案
按热度按时间rlcwz9us1#
原谅我更改了代码的格式。
我将更改ORDER BY,如下所示:
jqjz2hbq2#
你需要一种方法来计算每个系的学生数量,然后你需要一种方法来列出 * 所有 * 系,甚至是那些没有学生的系。
统计各系学生人数:(网址:
然后,将其作为子查询,将其左连接到另一个表。(http://sqlfiddle.com/#!15/39 a8 b/16/0)
LEFT JOIN保留DEPARTMENTS表中与
ON
子句不匹配的行。所以你必须处理这个(NULL)问题。方法如下。将SELECT改为
在聚合(COUNT/GROUP BY查询)缺少数据的情况下,将一个表连接到一个聚合有点棘手,但这就是您要做的。
您可以自己解决
ORDER BY
的问题。tzcvj98z3#
!!这终于是正确答案了!!
不要硬编码的问题,请继续关注和工作像专业
kpbpu0084#
执行如下。
z31licg05#
1选择系名,计数(学号)为学号2从学生3左外加入系ON 4系.系号=学生.系号5按系名分组6按系名排序;#贾特
3npbholx6#
从表stud_info s、表部门d中选择计数(*),其中s.dno=d.dno按d.dname分组