Mysql 跨2个表进行分组和计数
在MySQL中,我很难将count和groupby函数组合在一起 我需要从两个表生成摘要报告。相关表格:列为: 学生:ID,姓,姓,学号 学校:ID、简称、全名、团体、校长 每个学校被分配到数据库中的一个组,其中三个或四个学校将共享一个组号。我需要数一数每组学校的学生人数。 我可以数一数每所学校的学生人数,并按组对学校进行分类。从那里,我可以用Excel计算每组学生的总数。但是我应该能够直接从MySQL生成报告Mysql 跨2个表进行分组和计数,mysql,sql,Mysql,Sql,在MySQL中,我很难将count和groupby函数组合在一起 我需要从两个表生成摘要报告。相关表格:列为: 学生:ID,姓,姓,学号 学校:ID、简称、全名、团体、校长 每个学校被分配到数据库中的一个组,其中三个或四个学校将共享一个组号。我需要数一数每组学校的学生人数。 我可以数一数每所学校的学生人数,并按组对学校进行分类。从那里,我可以用Excel计算每组学生的总数。但是我应该能够直接从MySQL生成报告 SELECT Schools.Group,Schools.ID,Schools.S
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
可以这样做吗?看起来您只是想要每个
组的计数总和。因为已经有了要查找的结果,所以可以将其放入内部查询中,并对这些结果进行分组/求和:
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`
不过,内部查询只是您的复制/粘贴-我想知道它是如何工作的。在您的选择中没有列为学校ID
的任何内容。但它应该为你指明正确的方向
也许这就是你想要的?由于从未使用过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
这些应该会让你知道该去哪里
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(您当前分组的依据)。此外,您的选择列表中有ID和Shortname,但似乎并不希望根据所需的输出选择这些列
请注意,您可能会得到一行,其中schools.group为空,并且表示学生表上任何学校的计数与schools表不匹配。如果您没有得到这样一行,那么外部连接是没有意义的,您应该使用内部连接而不是左外部连接。谢谢!我现在更了解内心的疑问了。只需按学校分组。分组也很有效。