在多列上使用group by

我理解 "GROUP BY x "的意义。

但是GROUP BY x, y是如何工作的,它的含义是什么?

解决办法

按X分组意味着将所有X值相同的人放在一个组中

`按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个。

如果我们通过两列来 "分组"。

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, Semester 2"组的要求)。

希望这有意义。

评论(7)

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. HAVING(子句与GROUP BY子句结合使用,将返回的记录组限制为只有那些条件为TRUE的记录。 条件为 "true "的行)

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

如果你使用聚合函数,你可以使用所有这些,这是必须设置的顺序,否则你会得到一个错误。

聚合函数是。

MIN返回给定列中最小的值

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

AVG返回给定列中的平均值

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

COUNT(*)返回表格中的行数

评论(3)