我有一个表有多个行,用于相同的ID。我需要返回不包含值的行的不同ID的计数。我尝试过这样的事情:
SELECT COUNT(DISTINCT studID) AS 'ID'
FROM all_classes WHERE absences=0
AND (SELECT DISTINCT studID
FROM all_classes
WHERE absences<>0)
<>studID;
在这个例子中,我试图编写一个查询来查找所有班级中没有缺席的学生人数。如果它们在一个类中缺少但在其他类中为零,则应忽略它们(这就是我使用嵌套查询,但它不起作用)。提前感谢您的任何建议。
答案 0 :(得分:3)
重写查询的正确方法如下:
SELECT COUNT(DISTINCT studID) AS 'ID' -- 'total students' makes more sense?
FROM all_classes
WHERE studID NOT IN(
SELECT studID
FROM all_classes
WHERE absences <> 0
)
但是,当您实际上没有使用子查询选择某些内容时,最好使用存在:
SELECT COUNT(DISTINCT studID) AS 'ID'
FROM all_classes a
WHERE NOT EXISTS(
SELECT *
FROM all_classes a1
WHERE a1.studID = a.studID
AND absences > 0 -- I assume absences can't be negative
)
答案 1 :(得分:1)
可以这么简单:
SELECT Count(studID) AS IDCount
FROM all_classes
GROUP BY studID
HAVING SUM(absences) = 0
答案 2 :(得分:1)
我认为你很亲密。我会使用NOT IN子查询。我并不认为第一个标准是必要的。
这应该拉出id的所有行都缺席的任何学生ID = 0
SELECT COUNT(DISTINCT studID) AS 'ID'
FROM all_classes WHERE studID NOT IN
(SELECT DISTINCT studID
FROM all_classes
WHERE absences<>0);
答案 3 :(得分:0)
你想要的只是一个没有缺席的学生的人数。这应该有效。
select Count(*)
from all_classes
group by stud_id
having sum(absences)=0
这将为你提供有关学生的研究。
select studid
from all_classes
group by stud_id
having sum(absences)=0