查看下表...
Classes
ClassId ClassName
1 Math
2 Math
3 Science
4 Music
Registrations
RegistrationId ClassId StudentName
1 1 Stu
2 1 Rick
3 2 John
4 4 Barb
5 4 Dan
6 3 Einstein
是的,有 2 个类(class)具有相同的名称(数学),因为它们可能在不同的时间。我想获得一份类(class)列表以及每个类(class)注册的学生人数。我想要以下列(ClassId、ClassName、StudentCount)。
我对此的尝试将是......
SELECT Classes.ClassId, Classes.ClassName, Count(Registrations.RegistrationId)
FROM Classes
INNER JOIN Registrations ON Classes.ClassId = Registrations.ClassId
GROUP BY Classes.ClassId
(注意我想按 ClassId 分组,而不是 ClassName)。这在 SQLServer 2008 中可能吗?显然我问是因为 SQL 提示
"ClassName is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause."
谢谢!
最佳答案
不可以,SQL Server 不允许您省略 GROUP BY 中未包装在聚合函数中的列。包含类名没有什么坏处,因为分组依据将在分组依据列的组合上执行:
SELECT c.classid,
c.classname,
COUNT(r.registrationid)
FROM CLASSES c
JOIN REGISTRATIONS r ON r.classid = c.classid
GROUP BY c.classid, c.classname
您可以使用以下方法根据计数得出表格:
SELECT c.classid,
c.classname,
r.num
FROM CLASSES c
JOIN (SELECT t.classid,
COUNT(*) AS num
FROM REGISTRATIONS t
GROUP BY t.classid) r ON r.classid = c.classid
关于sql - 我可以在 SQL 的聚合函数中包含非聚合列而不将其放入 GROUP BY 子句中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4821779/