Mysql| Mysql分组函数
2017-11-27 20:32
183 查看
分组数据: (GROUP BY,HAVING )
分组是对查询出来的所有结果行再进行分组,所以GROUP BY 应该在过滤条件WHERE之后.对数据分完组之后再在组内进行数据的排序.所以GROUP BY在ORDER BY子句之前.
文章内容:
如何使用GROUP BY子句对数据组进行这些汇总计算,返回每个组的结果。我们看到了如何使用HAVING子句过滤特定的组,还知道了ORDER BY和GROUP BY之间以及WHERE和HAVING之间的差异。
对数据进行分组,主要的用途也是为了对组内的数据进行聚集运算(也就是针对不同的组可以使用聚集函数.)
GROUP BY子句的重要的规定:
①GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制。
②如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。
③GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
④除聚集计算语句外, SELECT语句中的每个列都必须在GROUP BY子句中给出。
⑤如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。
⑥GROUP BY子句必须出现在WHERE子句之后, ORDER BY子句之前。
SQL解释:
上面的SELECT语句指定了两个列, vend_id包含产品供应商的ID,num_prods为计算字段(用
关于ROLLUP的使用:
使用ROLLUP 使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值,在一下结果中,可以知道vend_id为NULL的一行数据,后面的num_prods是以上所有数据的汇总.
分组是对查询出来的所有结果行再进行分组,所以GROUP BY 应该在过滤条件WHERE之后.对数据分完组之后再在组内进行数据的排序.所以GROUP BY在ORDER BY子句之前.
文章内容:
如何使用GROUP BY子句对数据组进行这些汇总计算,返回每个组的结果。我们看到了如何使用HAVING子句过滤特定的组,还知道了ORDER BY和GROUP BY之间以及WHERE和HAVING之间的差异。
数据分组
GROUP BY子句指示MySQL分组数据,然后对每个组而不是整个结果集进行聚集。对数据进行分组,主要的用途也是为了对组内的数据进行聚集运算(也就是针对不同的组可以使用聚集函数.)
GROUP BY子句的重要的规定:
①GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制。
②如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。
③GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
④除聚集计算语句外, SELECT语句中的每个列都必须在GROUP BY子句中给出。
⑤如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。
⑥GROUP BY子句必须出现在WHERE子句之后, ORDER BY子句之前。
创建分组
GROUP BY子句指示MySQL分组数据,然后对每个组而不是整个结果集进行聚集。
SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id;
+---------+-----------+ | vend_id | num_prods | +---------+-----------+ | 1001 | 4 | | 1002 | 2 | | 1003 | 7 | | 1005 | 2 | +---------+-----------+
SQL解释:
上面的SELECT语句指定了两个列, vend_id包含产品供应商的ID,num_prods为计算字段(用
COUNT(*)函数建立)。
GROUP BY子句指示MySQL按vend_id排序并分组数据。这导致对每个vend_id而不是整个表计算num_prods一次。从输出中可以看到,供应商1001有3个产品,供应商1002有2个产品,供应商1003有7个产品,而供应商1005有2个产品。
关于ROLLUP的使用:
SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id WITH ROLLUP;
使用ROLLUP 使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值,在一下结果中,可以知道vend_id为NULL的一行数据,后面的num_prods是以上所有数据的汇总.
+---------+-----------+ | vend_id | num_prods | +---------+-----------+ | 1001 | 4 | | 1002 | 2 | | 1003 | 7 | | 1005 | 2 | | NULL | 15 | +---------+-----------+
过滤分组
HAVING支持所有WHERE操作符.HAVING和WHERE的差别
这里有另一种理解方法,WHERE在数据分组前进行过滤, HAVING在数据分组后进行过滤。这是一个重要的区别, WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。相关文章推荐
- mysql 高级查询 汇总和分组函数
- Mysql-学习笔记(==》集合函数与分组四)
- Mysql分组合并函数并进行数据列处理
- MySQL基础(3)——计算字段、处理函数、聚集函数和数据分组
- MYSQL 分组合并函数
- MySQL_函数、排序、分组
- MySQL使用GROUP_CONCAT()函数按ID分组将多条记录的某个字段以逗号或者指定分隔号隔开成一条记录
- MYSQL 分组合并函数
- MYSQL 分组合并函数
- MYSQL 分组合并函数
- MYSQL 分组合并函数
- MYSQL 分组合并函数
- 【MySQL】SELECT语句 计算字段 数据处理函数 汇总函数 分组数据 子查询
- MySQL 使用 INTERVAL() 函数 实现数据按区间分组
- mysql 集合函数,分组查询
- mysql查询分组归类函数-group_concat,通常与group_by一起使用
- 【Xcode学C-3】if等流程控制、函数的介绍说明标记分组、#include以及LLVM
- mysql 分组排序
- mysql分组取每组前几条记录(排名) 附group by与order by的研究
- Mysql和Oracle数据库concat()函数