我在合并 MySQL 中的计数和分组依据函数时遇到麻烦。
我需要从两个表中生成摘要报告。相关表:列是: 学生:ID、名字、姓氏、学校 ID 学校:ID、简称、全名、组、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
这可以做到吗?
最佳答案
看起来您只是想要每个组
计数的SUM
。由于您已经有了要查找的结果,因此您可以将其放入内部查询中,并对这些结果进行分组/求和:
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`
不过,内部查询只是您的复制/粘贴 - 我想知道它是如何工作的。 Select
中没有任何列为 SchoolID
的内容。但它仍然应该为您指明正确的方向。
也许这更符合您的需求?由于 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
这些应该可以告诉你该去哪里。
关于mysql - 跨 2 个表进行分组和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702090/