Mysql 跨2个表进行分组和计数

Mysql 跨2个表进行分组和计数,mysql,sql,Mysql,Sql,在MySQL中,我很难将count和groupby函数组合在一起 我需要从两个表生成摘要报告。相关表格:列为: 学生:ID,姓,姓,学号 学校:ID、简称、全名、团体、校长 每个学校被分配到数据库中的一个组,其中三个或四个学校将共享一个组号。我需要数一数每组学校的学生人数。 我可以数一数每所学校的学生人数,并按组对学校进行分类。从那里,我可以用Excel计算每组学生的总数。但是我应该能够直接从MySQL生成报告 SELECT Schools.Group,Schools.ID,Schools.S

在MySQL中,我很难将count和groupby函数组合在一起

我需要从两个表生成摘要报告。相关表格:列为: 学生:ID,姓,姓,学号 学校:ID、简称、全名、团体、校长

每个学校被分配到数据库中的一个,其中三个或四个学校将共享一个组号。我需要数一数每组学校的学生人数。 我可以数一数每所学校的学生人数,并按组对学校进行分类。从那里,我可以用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

可以这样做吗?

看起来您只是想要每个
组的计数总和。因为已经有了要查找的结果,所以可以将其放入内部查询中,并对这些结果进行分组/求和:

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表不匹配。如果您没有得到这样一行,那么外部连接是没有意义的,您应该使用内部连接而不是左外部连接。

谢谢!我现在更了解内心的疑问了。只需按
学校分组。分组也很有效。