MySQL分组数据
来源:互联网 发布:linux 打开vim编辑器 编辑:程序博客网 时间:2024/05/21 14:45
说明:本文所使用的数据库样例表创建脚本下载地址:https://github.com/zhaoxd298/mysql_scripts
一、创建分组
分组是在SELECT语句的GTOUP BY子句中建立的,先看一个分组的例子:
SELECT vend_id, COUNT(*) AS num_prodFROM productsGROUP BY vend_id;
执行结果:
上面的SELECT指定了两个列,vend_id包含产品供应商的ID,num_prods为计算字段。GROUP BY子句指示MySQL按vend_id排序并分组数据。这样便会对每个vend_id计算num_prods一次。下面为使用GROUP BY的一些重要的规定:
1.GROUP BY可以包含任意数据的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制;
2.GROUP BY子句中列的每个列都必须是检所列或有效表达式,但不能是聚集函数,如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,不能使用别名;
3.如果分组列中鞠咏NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,将他们分为一组;
4.GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。
WITH ROLLP关键字:可以对所有分组进行汇总,用法如下:
SELECT vend_id, COUNT(*) AS num_prodFROM productsGROUP BY vend_id WITH ROLLUP;
执行结果:
二、过滤分组
除了能用GROUP BY分组数据外,MySQL还允许过滤分组,规定包括哪些分组,排除哪些分组。
MySQL通过HAVING子句来对分组进行过滤。HAVING的用法和WHERE的用法几乎一样。唯一的差别就是WHERE是对行进行过滤,是在分组前进行过滤,而HAVING是对分组进行过滤,是在数据分组之后过滤的。下面为对分组进行过滤的一个例子:
SELECT vend_id, COUNT(*) AS num_prodFROM productsGROUP BY vend_idHAVING COUNT(*) >= 3;
执行结果:
下面为同时使用WHERE和HAVING对数据进行过滤的例子:
SELECT vend_id, COUNT(*) AS num_prodFROM productsWHERE prod_price >= 10GROUP BY vend_idHAVING COUNT(*) >= 2;
执行结果:
三、分组和排序
在本文的例子中,我们发现用GROUP BY分组的数据确实是以分组顺序输出的。但情况并不总是这样,因为它并不是SQL规范所要求的。此外,用户可能会要求以不同的分组的顺序排序。故,如果需要指定排序顺序的话一定要通过ORDER BY来排序,而不要依赖GROUP BY的输出顺序,下面先给出没有使用ORDER BY的例子:
SELECT order_num, SUM(quantity*item_price) AS order_totalFROM orderitemsGROUP BY order_numHAVING SUM(quantity*item_price) >= 50;
执行结果:
下面为使用ORDER BY子句的例子:
SELECT order_num, SUM(quantity*item_price) AS order_totalFROM orderitemsGROUP BY order_numHAVING SUM(quantity*item_price) >= 50ORDER BY order_total;
执行结果:
四、SELECT子句顺序
下表给出SELECT子句的顺序:
- MySQL分组数据
- mysql分组后取前几条数据
- Mysql的数据分组
- mysql---数据分组
- MySQL分组数据
- MySQL: 按分组返回数据
- mysql分组查询最新数据
- 每天一点MySQL-分组数据
- MySQL之分组选择数据
- Mysql中数据分组,分组内限制数据条数
- MySQL必知必会-10MySQL分组数据
- mysql分组查询最大的数据
- mysql必知必会 第十三章 分组数据
- mysql分组排序去数据的方式
- MySQL Group By 数据分组-- 陷阱
- mysql 分组取第一条数据
- 《MySQL必知必会学习笔记》:数据分组
- MYSQL 分组取前N条数据
- PHP生成加减算法方式的验证码
- 使用@property 改变get和set
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- 15.1 报文与实体
- Subsets
- MySQL分组数据
- 排序算法
- Spring基础_在JavaConfig中引用xml配置<四>
- MySQL索引有啥好处!怎么合理的添加
- Java配置----JDK开发环境搭建及环境变量配置
- yum 升级php版本
- Android的发展历史
- 遇到的那些可爱的面试题2017-10-30
- 15.2 Content-Length 实体的大小