SQL-数据分组之GroupBy关键字
1、创建分组
分组就是把具有相同的数据值的⾏放在同⼀组中。可以对同⼀分组数据使⽤汇总函数进⾏处理,例如求分组数据的平均值等。指定的分组字段除了能按该字段进⾏分组,也会⾃动按该字段进⾏排序。
SELECT COUNT(id)'男⽣与⼥⽣的⼈数'
FROM demo
GROUP BY gender
分析:这条sql语句的功能是统计男⽣和⼥⽣的⼈数。
GROUP BY⼦句⼀些重要的规定:
GROUP BY⼦句可以包含任意数⽬的列。这使得能对分组进⾏嵌套(使⽤逗号分开),为数据分组提供更细致的控制。
GROUP BY⼦句必须出现在WHERE⼦句之后,ORDER BY⼦句之前。
如果列中有多⾏NULL值,它们将分为⼀组。
除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY⼦句中给出。
2、过滤分组
除了能⽤GROUP BY分组数据外,MySQL还允许过滤分组,其功能与WHERE⼦句相似。它们唯⼀的差别是WHERE过滤⾏,⽽HAVING 过滤分组。同时HAVING⽀持所有WHERE操作符,换句话说,也就是WHERE能⽤的地⽅,HAVING都可以使⽤。
SELECT count(id)'班级的⼈数'
FROM demo
groupby是什么函数
GROUP BY class
HAVING COUNT(*)>50
分析:这条sql的功能是对class列进⾏分组,同时分组⼤⼩不对于50的分组,将被过滤。
HAVING和WHERE的差别:
WHERE在数据分组前进⾏过滤,HAVING在数据分组后进⾏过滤。这是⼀个重要的区别,WHERE排除的⾏不包括在分组中。这可能会改变计算值,从⽽影响HAVING⼦句中基于这些值过滤掉的分组。
3、SELECT⼦句顺序
最后,我们回顾⼀下SELECT语句中⼦句的顺序。下表列出了各个⼦句,⽽且编写sql时应该按照表中的顺序进⾏编写。
⼦句说明是否必须使⽤
SELECT要返回的列或表达式是
FROM从中检索数据的表仅在从表选择数据时使⽤
WHERE⾏级过滤否
GROUP BY分组说明仅在按组计算聚集时使⽤
HAVING组级过滤否
ORDER BY输出排序顺序否
LIMIT要检索的⾏数否

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。