我无法通过MySQL中的函数来统计计数和分组。
我需要两个表来生成摘要报告。相关表格:列是: 学生:ID,FirstName,LastName,SchoolID 学校:ID,ShortName,FullName,Group,HeadCoachID
每个学校都被分配到数据库中的组,其中三到四所学校将共享一个组编号。我需要计算每组学校的学生人数。 我可以计算每所学校的学生人数,并按小组对学校进行分类。从那里我可以使用Excel来计算每组中的学生数量。但我应该可以直接从MySQL生成报告。
SELECT Schools.Group,Schools.ID,Schools.ShortName,Count(Students.ID) From
Students LEFT JOIN Schools on Students.SchoolID=Schools.ID
GROUP BY SchoolID ORDER BY Schools.Group
此命令的输出如下:
Group ID ShortName Count(Students.ID)
2 137 NSHA HS 21
2 117 Great Neck North 32
2 118 Great Neck South 30
3 120 HANC 13
3 114 Freeport 23
3 126 Kellenberg 10
3 152 Uniondale 18
我想要制作的是:
Group Count(Students.ID)
2 83
3 64
可以这样做吗?
答案 0 :(得分:1)
您似乎只想要SUM
每个Group
的计数。由于您已经拥有了所需的结果,因此您可以将其放在内部查询中,并对这些结果进行分组/求和:
SELECT `Group`, SUM(`Count`)
FROM
(
SELECT Schools.Group, Schools.ID, Schools.ShortName, Count(Students.ID) As `Count`
From Students
LEFT JOIN Schools on Students.SchoolID=Schools.ID
GROUP BY SchoolID
) As X
GROUP BY `Group`
ORDER BY `Group`
虽然,内部查询只是你的复制/粘贴 - 我想知道它是如何工作的。 SchoolID
中没有列为Select
的内容。但它应该指出你正确的方向。
也许这更像是你在寻找什么?由于ShortName
从未使用过:
SELECT `Group`, SUM(`Count`)
FROM
(
SELECT Schools.Group, Schools.ID, Count(Students.ID) As `Count`
From Students
LEFT JOIN Schools on Students.SchoolID=Schools.ID
GROUP BY Schools.Group, Schools.ID
) As X
GROUP BY `Group`
ORDER BY `Group`
或者,甚至可能没有内部选择,只是直接:
SELECT Schools.Group, Count(Students.ID) As `Count`
From Students
LEFT JOIN Schools on Students.SchoolID = Schools.ID
GROUP BY Schools.Group
ORDER BY Schools.Group
这些应该让我们知道该去哪里。
答案 1 :(得分:1)
SELECT Schools.Group, Count(Students.ID)
From Students
LEFT JOIN Schools
on Students.SchoolID = Schools.ID
GROUP BY Schools.Group
ORDER BY Schools.Group
如果你想要每组一行,你需要按schools.group进行分组,而不是students.schoolid(你目前正在分组的那一行)。您在SELECT列表中也有ID和短名称,但实际上并不希望根据您所需的输出选择这些列。
请注意,您可能会获得一行其中schools.group为空白,并且表示学生表中任何学校的计数与学校表不匹配。如果你没有得到这样的行,那么外连接是没有意义的,你应该使用内连接而不是左外连接。