在多列上使用分组依据


Answers:


2025

Group By X意味着将所有具有相同X值的那些放在一组中

Group By X, Y表示将X和Y值都相同的那些放在一组

为了举例说明,假设我们有一个下表,该表与谁在大学里参加什么学科有关:

Table: Subject_Selection

Subject   Semester   Attendee
---------------------------------
ITB001    1          John
ITB001    1          Bob
ITB001    1          Mickey
ITB001    2          Jenny
ITB001    2          James
MKB114    1          John
MKB114    1          Erica

group by仅在主题列上使用a 时;说:

select Subject, Count(*)
from Subject_Selection
group by Subject

您将得到类似:

Subject    Count
------------------------------
ITB001     5
MKB114     2

...因为ITB001有5个条目,MKB114有2个条目

如果我们去group by两列:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

我们会得到这个:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

这是因为,当我们按两列分组时,是说“将它们分组,以便所有具有相同主题和学期的人都在同一组中,然后计算所有聚合函数(计数,总和,平均值等)。 )对于每个这些基团”的。在这个例子中,这是由事实证明,当我们指望他们,有3人在第一学期做ITB001和2做在学期2.两者的人做MKB114在第一学期,所以没有第二学期的行(没有数据适合“ MKB114,第二学期”组)

希望这是有道理的。


11
@Smashery:那么这是否也意味着GROUP BY A,B相同GROUP BY B,A
tumchaaditya

23
是的,它确实。我不能肯定地说它们是否彼此一样有效,但是它们会给出相同的结果,是的。
Smashery 2014年

2
可能需要补充的是GROUP BY a, bGROUP BY a AND b由于第二个项目仅列出内容完全相同的分组项目,而没有“分组” ,因此之间存在差异。在这种情况下,输出将与第一个相同。
Dwza 2015年

5
我想补充一点,您按列分组的顺序无关紧要。在上述按学期分组的示例中,主题会给出相同的结果
user2441441

2
好吧,按a,b分组和按b分组,a不会返回相同的结果-这些行以不同的顺序显示
fanny

33

GROUP BY子句与聚合函数结合使用,以将结果集按一列或多列分组。例如:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

请记住以下顺序:

1)SELECT(用于从数据库中选择数据)

2)FROM(子句用于列出表)

3)WHERE(子句用于过滤记录)

4)GROUP BY(可在SELECT语句中使用子句来收集多个记录中的数据并将结果按一列或多列分组)

5)HAVING(子句与GROUP BY子句结合使用,将返回的行的组限制为条件为TRUE的行)

6)ORDER BY(关键字用于对结果集进行排序)

如果使用聚合函数,则可以使用所有这些,这是必须设置它们的顺序,否则可能会出错。

汇总函数为:

MIN返回给定列中的最小值

SUM返回给定列中数值的总和

AVG返回给定列的平均值

COUNT返回给定列中值的总数

COUNT(*)返回表中的行数


1
但是我们要在哪放置2列,如何基于2列或更多列进行汇总是一个问题
Chaitanya Bapat

嗨,Chaitanya,我不知道这是否是您要问的,但让我给您举几个例子。如果您有产品表,则可以通过这种方式使用聚合函数,下面是两种情况:从产品中选择AVG(库存);这将计算产品表中库存的平均单位。现在,您要按产品类别计算库存单位,您必须将AVG函数与GROUP BY子句一起使用,如下所示:SELECT categoryId,AVG(instock)FROM products GROUP BY categoryId;
S. Mayol

这甚至无法远程回答问题……这里的问题是,如何同时实现“主题”和“学期”的“链式分组”,如给定示例中所述……
MahNas92
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.