在多列上使用分组
我明白GROUP BY x
但GROUP BY x, y
如何工作的,这是什么意思?
Group By X
表示将 Group By 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, 两个做在学期2.无论是人做MKB114都在第一学期,所以没有排第2学期(没有数据适合组“MKB114,第2学期”)
希望这是有道理的。
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(*)返回表中的行数
链接地址: http://www.djcxy.com/p/34287.html上一篇: Using group by on multiple columns
下一篇: Using GroupBy, Count and Sum in LINQ Lambda Expressions