mysql - 跨 2 个表进行分组和计数

标签 mysql sql

我在合并 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/

相关文章:

sql - SQL Server 中 SUM() 的对应项是什么?

mysql - SQL select : summ all ratings for setups from users. 一张表中的多个设置(包括 SQL FIDDLE)

mysql - SQL:KEY id_2 有什么作用?

MYSQL将id与列关键字匹配并显示结果

PHP/MySQL 有 SELECT...INSERT 和/或 SELECT...INSERT...DELETE

mysql - 选择非重复记录

mysql - SQL检查表是否存在然后创建表并插入到同一个查询中

sql - 将分隔字符串分解为临时表

sql - 匹配两个数据库中的行组

php - 检查数据库是否有项目,如果没有则插入