提问



我明白GROUP BY x的意思


GROUP BY x, y如何运作,它是什么意思?

最佳参考


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时;说:


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


这是因为,当我们按两列分组时,它会说将它们分组,以便所有具有相同主题和学期的人都在同一组中,然后计算所有聚合函数(计数,总和,平均等)为每个组。在这个例子中,事实证明了这一点,当我们计算它们时,三个人在第一学期做ITB001,两个在第二学期做这个。做MKB114的人在第一学期,因此第二学期没有行(没有数据适合MKB114,第二学期组)


希望这是有道理的。

其它参考1


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子句结合使用)
  将返回行的组限制为仅包含其条件的行
  是真的)

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



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


聚合函数是:



  MIN返回给定列中的最小值

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

  
  AVG返回给定列的平均值

  
  COUNT返回给定列中的值的总数

  
  COUNT(*)返回表中的行数