在多个列上使用分组
我明白group by x
的点
但是group by x, y
如何工作的,这是什么意思?
Group By X
表示将 Group By X
所有具有相同值的那些组合在一个组中 。
Group By X, Y
依据 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个条目
如果我们要分两列:
select Subject, Semester, Count(*) from Subject_Selection group by Subject, Semester
我们会得到这个:
Subject Semester Count ------------------------------ ITB001 1 3 ITB001 2 2 MKB114 1 2
这是因为,当我们按两列进行分组时,它们是“将他们分组,以便所有具有相同学科和学期的学生在同一个组中,然后计算所有的聚合函数 (计数,总和,平均等等)。 ) 为每个这些组“ 。 在这个例子中,通过这样的事实可以certificate这一点,当我们计算它们时,在第一学期有三个人在做ITB001,在第二学期有两个在做ITB001。两个做MKB114的人都在第一学期,所以没有排第二学期(没有数据符合组“MKB114,第二学期”)
希望这是有道理的。
GROUP BY子句与聚合函数结合使用,可以按一列或多列对结果集进行分组。 例如:
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
记住这个命令:
1)SELECT(用于从数据库中select数据)
2)FROM(子句用来列表表)
3)WHERE(子句用于过滤logging)
4)GROUP BY(子句可以在SELECT语句中用于跨多个logging收集数据,并将结果按一个或多个列分组)
5)HAVING(子句与GROUP BY子句结合使用,将返回行的组限制为只有条件为TRUE的行)
6)ORDER BY(关键字用于sorting结果集)
如果使用聚合函数,则可以使用所有这些函数,这是必须设置的顺序,否则可能会出错。
聚合函数是:
MIN返回给定列中的最小值
SUM返回给定列中数值的总和
AVG返回给定列的平均值
COUNT返回给定列中值的总数
COUNT(*)返回表中的行数