部门名称和学生人数

时间:2017-03-13 21:27:27

标签: mysql database

我在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

Departments表有以下字段:

Dept_ID
Dept_Name

大学使用2个数据表(学生和部门)来存储数据 关于其学生和与各专业相关的部门。

  • 编写查询以打印相应的部门名称和学生人数 在Departments表中所有部门的每个部门主修 (即使没有现在的学生)。

  • 按降低学生人数对结果进行排序;如果两个或多个部门的学生人数相同,则按部门名称的字母顺序对这些部门进行排序。

4 个答案:

答案 0 :(得分:1)

您需要一种方法来统计每个部门的学生,然后您需要一种方法来列出所有部门,甚至是那些没有学生的部门。

计算每个部门的学生:(http://sqlfiddle.com/#!15/39a8b/15/0

          SELECT Dept_ID, COUNT(*) Students
            FROM STUDENTS 
           GROUP BY Dept_ID

然后,将其视为子查询,将其连接到另一个表。 (http://sqlfiddle.com/#!15/39a8b/16/0

 SELECT D.DEPT_NAME, S.Students
   FROM Departments D
   LEFT JOIN (
          SELECT Dept_ID, COUNT(*) Students
            FROM STUDENTS 
           GROUP BY Dept_ID
        ) S ON D.Dept_ID = S.Dept_ID

LEFT JOIN保留DEPARTMENTS表中与ON子句不匹配的行。这可以让你得到这样的东西。

  Biology           7
  Mathematics  (NULL)
  Sociology        11
  Physics           3

所以你必须处理那个(NULL)问题。这是如何做。将SELECT更改为

 SELECT D.DEPT_NAME, IFNULL(S.Students,0)

将表连接到聚合(COUNT / GROUP BY查询)缺少数据的聚合是有点棘手的。但这就是你如何做到的。

您可以自己找出ORDER BY内容。

答案 1 :(得分:1)

SELECT d.department_name, COUNT(s.student_name) AS student_count
FROM student s
LEFT JOIN department d
ON s.department_id = d.department_id
GROUP BY department_name
ORDER BY d.department_name;

!!这终于是正确答案了!!

不要硬编码问题,请继续关注并像专业人士一样工作

答案 2 :(得分:0)

在下方执行。

SELECT   
    ad.Dept_Name, 
    count(ass.Student_Id) as Stduent_Enrolled

    FROM [Alok.Departments] ad

    Left Outer Join [Alok.Students] ass
        ON ad.Dept_ID = ass.Dept_ID

    Group by ad.Dept_Name

    ORDER by
       CASE WHEN COUNT(ad.Dept_ID) >=2 
           THEN ad.DEPT_NAME END desc,
       CASE WHEN COUNT(ad.Dept_ID) < 2 
           THEN ad.DEPT_NAME END asc

答案 3 :(得分:0)

1 选择department_name,count(student_id) 作为student_count 2 来自学生 3 左外连接部门 ON 4 Department.department_id=student.department_id 5 按部门名称分组 6 按部门名称排序; #jaat