如何编写带计数的查询
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)
---------------
==================
StudentsClasses.StudentID 和 Students.ID 加入了他们。
我正在尝试向 return 注册人数最少 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
但是,只有 return 所有学生的 ASC 顺序至少为 1 class。
我知道正确答案是 7 名学生 0 classes.
我怎样才能将我的查询修改为 return 只有那 7 名学生有 0 classes。
要招募那些没有 类 的学生,您应该在此处使用 LEFT JOIN
而不是 INNER JOIN
,以确保来自 students
[=列出了 20=],即使 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
这个问题的答案。
我怎样才能将我的查询修改为 return 只有 0 类.
的那 7 名学生
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);
我有两个表如下:
==================
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 加入了他们。
我正在尝试向 return 注册人数最少 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
但是,只有 return 所有学生的 ASC 顺序至少为 1 class。
我知道正确答案是 7 名学生 0 classes.
我怎样才能将我的查询修改为 return 只有那 7 名学生有 0 classes。
要招募那些没有 类 的学生,您应该在此处使用 LEFT JOIN
而不是 INNER JOIN
,以确保来自 students
[=列出了 20=],即使 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
这个问题的答案。 我怎样才能将我的查询修改为 return 只有 0 类.
的那 7 名学生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);