mysql 系名及学生人数

ppcbkaq5  于 2023-01-29  发布在  Mysql
关注(0)|答案(6)|浏览(206)

我在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表中所有系(甚至当前没有学生的系)各自的系名和每个系主修的学生数。
  • 按学生人数降序排列结果;如果两个或多个系学生数相同,则按系名称的字母顺序对这些系进行排序。
rlcwz9us

rlcwz9us1#

原谅我更改了代码的格式。
我将更改ORDER BY,如下所示:

SELECT
    d.DEPT_NAME,
    COUNT(s.STUDENT_ID)
FROM
    Departments d 
    LEFT JOIN Students s ON d.DEPT_ID = s.DEPT_ID
GROUP by
    d.DEPT_ID
ORDER by
    COUNT(s.STUDENT_ID) DESC, 
    d.DEPT_NAME ASC
jqjz2hbq

jqjz2hbq2#

你需要一种方法来计算每个系的学生数量,然后你需要一种方法来列出 * 所有 * 系,甚至是那些没有学生的系。
统计各系学生人数:(网址:

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

然后,将其作为子查询,将其左连接到另一个表。(http://sqlfiddle.com/#!15/39 a8 b/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的问题。

tzcvj98z

tzcvj98z3#

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;

!!这终于是正确答案了!!
不要硬编码的问题,请继续关注和工作像专业

kpbpu008

kpbpu0084#

执行如下。

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
z31licg0

z31licg05#

1选择系名,计数(学号)为学号2从学生3左外加入系ON 4系.系号=学生.系号5按系名分组6按系名排序;#贾特

3npbholx

3npbholx6#

从表stud_info s、表部门d中选择计数(*),其中s.dno=d.dno按d.dname分组

相关问题