【MySQL】分组数据
目录
- 创建分组
- 过滤分组
- 分组和排序
- SELECT子句顺序
分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。
创建分组
SELECT vend_id, COUNT(*) AS num_prods
FROM products
GROUP BY vend_id;
- GROUP BY 子句可以包含任意数目的列;
- 如果在GROUP BY 子句中嵌套了分组,数据将在最后规定的分组上进行汇总;
- GROUP BY 子句中列出的每个列必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY 子句中指定相同的表达式,不能使用别名;
- 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY 子句中给出;
- 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组;
- GROUP BY 子句必须出现在WHERE子句之后,ORDER BY子句之前。
使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别的值。
SELECT vend_id, COUNT(*) AS num_prods
FROM products
GROUP BY vend_id WITH ROLLUP;
过滤分组
过滤分组:规定包括哪些分组,排除哪些分组。
关键字:HAVING
所有类型的WHERE子句都可以用HAVIBNG来替代。
WHERE过滤行,HAVING过滤分组。
WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
SELECT vend_id, COUNT(*) AS num_prods
FROM products
WHERE prod_price >= 10
GROUP BY vend_id
HAVING COUNT(*) >= 2;
# 这条语句过滤所有商品价格至少为10的行,然后按照vend_id分组数据
# 然后对过滤计数至少为2的分组
SELECT vend_id, COUNT(*) AS num_prods
FROM products
GROUP BY vend_id
HAVING COUNT(*) >= 2;
# 这条语句相比于上一条少了WHERE过滤
分组和排序
GROUP BY 和 GROUP BY 的区别
ORDER BY | GROUP BY |
---|---|
排序产生的输出 | 分组行。但输出可能不是分组的顺序 |
任意列都可使用(甚至非选择的列也可以使用) | 只可能使用选择列或表达式列,而且必须使用每个选择列表达式 |
不一定需要 | 如果与聚集函数一起使用列(或表达式),则必须使用 |
不要忘记ORDER BY
应该提供明确的ORDER BY子句,即使其效果等同于GROUP BY子句也是如此。
SELECT order_num, SUM(quantity*item_price) AS ordertotal
FROM orderitems
GROUP BY order_num
HAVING SUM(quantity*item_price) >= 50
ORDER BY ordertotal;
SELECT子句顺序
子句 | 说明 | 是否必须使用 |
---|---|---|
SELECT | 要返回的列或表达式 | 是 |
FROM | 从中检索数据的表 | 仅在从表选择数据时使用 |
WHERE | 行级过滤 | 否 |
GROUP BY | 分组 | 仅在按组计算聚集时使用 |
HAVING | 组级过滤 | 否 |
ORDER BY | 输出排序顺序 | 否 |
LIMIT | 要检索的行数 | 否 |
【MySQL】分组数据相关推荐
- mysql 分组数据_MySQL基础之分组数据
分组允许把数据分为多个逻辑组, 以便能对每个组进行聚集计算 创建分组 分组是在SELECT语句的GROUP BY子句中建立的. MariaDB [crashcourse]> SELECT ven ...
- MySQL(五)汇总和分组数据
一.汇总数据 工作中经常需要汇总数据而不是将它们全部检索出来(实际数据本身:返回实际数据是对时间和处理资源的浪费),这种类型的检索有以下特点: ①确定表中的行数(或者满足某个条件或包含某个特定值的行数 ...
- 如何用mysql创建orders表_《MySQL必知必会》学习笔记
本书所用的表: 68.png 67.png 66.png 65.png 64.png 63.png 第一章:了解SQL 数据库:保存有组织的数据的容器(通常是一个文件或一组文件). 数据库软件:DBM ...
- Mysql 必知必会(一)
文章案例所需的SQL文件,点击下载 使用MySQL 进入mysql安装目录下的bin目录: 连接Mysql:mysql -uroot -p123456; 显示Mysql下的所有数据库:show dat ...
- [Mysql] GROUP BY分组
练习案例数据 DROP TABLE IF EXISTS purchase_info; CREATE TABLE purchase_info( commodity_id VARCHAR(8), cate ...
- mysql查询本用户的表的列名等信息_mysql常用命令查询手册
启动MySQL服务 $ sudo service mysql start 或者 /etc/init.d/mysql start 使用root用户登陆 $ mysql -u 用户名 -p 密码 查看命令 ...
- 深耕MySQL - MySQL必知必会
文章目录 01. 数据准备 02. 检索数据 03. 排序检索数据 04. 过滤数据 05. 数据过滤 06. 用通配符进行过滤 like 07. 使用正则表达式进行搜索 regexp 08. 计算字 ...
- mysql数据库teach_读书笔记 - 《MYSQL必知必会》
术语: 数据库 , 表 , 模式 , 列 , 数据类型 , 行 , 主键 命令行: mysql -u ben -p -h myserver -P 9999 检索 SELECT 列名 FROM 表名; ...
- MySQL快速入门笔记
文章目录 1.数据库的基本操作 2.表的基本操作 3.数据操作 4.数据类型 5.列属性完整性 6.数据库设计思维 7.单表查询 8.多表查询 9.子查询 10.视图(view) 11.事务(tran ...
- mysql必须包含数据组_MySQL必知必会--分 组 数 据
数据分组 目前为止的所有计算都是在表的所有数据或匹配特定的 WHERE 子句的 数据上进行的.提示一下,下面的例子返回供应商 1003 提供的产品数目 但如果要返回每个供应商提供的产品数目怎么办?或者 ...
最新文章
- 利用查找替换批处理(附完整源码),进行高效重构
- 十种工具审核网络安全
- Linux系统下使用桥接模式,无法ping通外网解决问题方案!
- 归并排序及C语言实现
- sql server 更改端口之后的登入方式
- NEC电影服务器型号,NEC数字电影放映一体机NC2300S-A+详细信息_产品参数_价格_联系方式_DAV数字音视工程网...
- bool类型头文件_C++ Primer Chapter2 变量和基本类型
- java基础知识查漏 三
- Selenium常见异常分析及解决方案
- HTML5学习笔记(二十六):JavaScript的错误处理
- bzoj2705 [SDOI2012]Longge的问题
- echarts 获取点击的y轴数值_ECharts关系图
- ffmpeg【百度百科】
- 寻找协调器FindCoordinatorRequest请求流程
- Google Earth Engine APPS(GEE)——使用 AREA2 和 CODED 估算森林砍伐和退化面积(第 1 部分:运行 CODED)
- 如何以应届生的身份进入阿里巴巴?
- 虚拟机里博图能连接上实物PLC,但是HMI仿真不能连接实物PLC
- 测试小故事52:怎么测?
- 谁能够最终实现超越普通计算机的“量子霸权”
- aplayer得使用,记一次aplayer/Aplayer开发心得
热门文章
- 使用XSSFWorkbook导出excel在微软office中无法打开
- MyBatis增加时报错“无效的列类型”
- 盘点常用的九种设计模式
- 解决了 source insight 设置为 微软雅黑后 中文字体重影
- 英语写作替换词与上下文连接词
- linux ls命令详解
- 推荐几个清北计算机系学霸的 IT 公众号!
- (从零开始)基于检测前跟踪雷达目标跟踪技术的研究:第(7)周所学知识(PF-TBD感悟:纯干货,全网你绝对搜不到下面的干货)
- 前端开发工具——VScode的使用
- 长城人寿2019年保费业绩健康增长,原保费收入同比增长30.70%