繁体   English   中英

如何用count写查询

[英]How to write a query with count

我有两个表,如下所示:

==================
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)
---------------
==================

他们由StudentClasses.StudentID和Students.ID加入。

我正在尝试编写查询以返回注册最少课程的学生。 我的查询是:

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个班级的学生。

我知道正确的答案是0个班级的7名学生。

如何修改查询以仅返回那7个班级为0的学生。

要招募那些没有班级的学生,而不是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的学生):

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

这应该将您的结果限制为注册人数最少的学生(因此,如果目前最小人数为零,则为零,如果确实最少人数为3,则它将使用3,依此类推。 )

select      s.name,
            v.classes
from        students s
       join (
                select      s.name,
                            count(sc.id) as classes
                from        students s
                  left join studentsclasses sc
                         on s.id = sc.studentid
                group by    s.name
                order by    count(sc.id)
                limit 1
            ) v
         on s.name = v.name

这个问题的答案。 如何修改查询以仅返回那7个班级为0的学生。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM