gpt4 book ai didi

mysql - 如何编写带计数的查询

转载 作者:行者123 更新时间:2023-11-30 23:47:40 24 4
gpt4 key购买 nike

我有两个表如下:

==================
StudentsClasses
----------------
ID (Registration ID of the class)
StudentID (ID of student taking class)
ClassID (ID of certain class)
----------------
==================

Students
---------------
ID (ID of student)
Name (Name of student)
GradeLevelID (Grade of student)
---------------
==================

它们由 StudentsClasses.StudentID 和 Students.ID 加入。

我正在尝试编写查询以返回注册类(class)最少的学生。我的查询是:

SELECT Students.Name, COUNT(StudentsClasses.StudentID) AS Expr1
FROM StudentsClasses INNER JOIN
Students ON StudentsClasses.StudentID = Students.ID
GROUP BY StudentsClasses.StudentID, Students.Name
ORDER BY Expr1

但是,这只会返回按 ASC 顺序至少上过 1 个类(class)的所有学生。

我知道正确答案是 7 个学生 0 个类(class)。

我如何修改我的查询以仅返回 0 个类(class)的 7 名学生。

最佳答案

要招募那些没有类(class)的学生,而不是 INNER JOIN,您应该在此处使用 LEFT JOIN,以确保来自 students< 的所有行 表被列出,即使 studentclasses 中没有该特定学生的行。

SELECT
s.name, count(sc.id) AS classes
FROM
students s
LEFT JOIN studentsclasses sc ON s.id = sc.studentid
GROUP BY s.name
HAVING count(sc.id) = 0 -- added after comment
ORDER BY count(sc.id);

或另一种方法(只检索有 0 个类(class)的学生):

SELECT
s.name
FROM
students.s
LEFT JOIN studentsclasses sc ON s.id = sc.studentid
WHERE
sc.id IS NULL

关于mysql - 如何编写带计数的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29868148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com