目录

  • 创建分组
  • 过滤分组
  • 分组和排序
  • 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】分组数据相关推荐

  1. mysql 分组数据_MySQL基础之分组数据

    分组允许把数据分为多个逻辑组, 以便能对每个组进行聚集计算 创建分组 分组是在SELECT语句的GROUP BY子句中建立的. MariaDB [crashcourse]> SELECT ven ...

  2. MySQL(五)汇总和分组数据

    一.汇总数据 工作中经常需要汇总数据而不是将它们全部检索出来(实际数据本身:返回实际数据是对时间和处理资源的浪费),这种类型的检索有以下特点: ①确定表中的行数(或者满足某个条件或包含某个特定值的行数 ...

  3. 如何用mysql创建orders表_《MySQL必知必会》学习笔记

    本书所用的表: 68.png 67.png 66.png 65.png 64.png 63.png 第一章:了解SQL 数据库:保存有组织的数据的容器(通常是一个文件或一组文件). 数据库软件:DBM ...

  4. Mysql 必知必会(一)

    文章案例所需的SQL文件,点击下载 使用MySQL 进入mysql安装目录下的bin目录: 连接Mysql:mysql -uroot -p123456; 显示Mysql下的所有数据库:show dat ...

  5. [Mysql] GROUP BY分组

    练习案例数据 DROP TABLE IF EXISTS purchase_info; CREATE TABLE purchase_info( commodity_id VARCHAR(8), cate ...

  6. mysql查询本用户的表的列名等信息_mysql常用命令查询手册

    启动MySQL服务 $ sudo service mysql start 或者 /etc/init.d/mysql start 使用root用户登陆 $ mysql -u 用户名 -p 密码 查看命令 ...

  7. 深耕MySQL - MySQL必知必会

    文章目录 01. 数据准备 02. 检索数据 03. 排序检索数据 04. 过滤数据 05. 数据过滤 06. 用通配符进行过滤 like 07. 使用正则表达式进行搜索 regexp 08. 计算字 ...

  8. mysql数据库teach_读书笔记 - 《MYSQL必知必会》

    术语: 数据库 , 表 , 模式 , 列 , 数据类型 , 行 , 主键 命令行: mysql -u ben -p -h myserver -P 9999 检索 SELECT 列名 FROM 表名; ...

  9. MySQL快速入门笔记

    文章目录 1.数据库的基本操作 2.表的基本操作 3.数据操作 4.数据类型 5.列属性完整性 6.数据库设计思维 7.单表查询 8.多表查询 9.子查询 10.视图(view) 11.事务(tran ...

  10. mysql必须包含数据组_MySQL必知必会--分 组 数 据

    数据分组 目前为止的所有计算都是在表的所有数据或匹配特定的 WHERE 子句的 数据上进行的.提示一下,下面的例子返回供应商 1003 提供的产品数目 但如果要返回每个供应商提供的产品数目怎么办?或者 ...

最新文章

  1. 利用查找替换批处理(附完整源码),进行高效重构
  2. 十种工具审核网络安全
  3. Linux系统下使用桥接模式,无法ping通外网解决问题方案!
  4. 归并排序及C语言实现
  5. sql server 更改端口之后的登入方式
  6. NEC电影服务器型号,NEC数字电影放映一体机NC2300S-A+详细信息_产品参数_价格_联系方式_DAV数字音视工程网...
  7. bool类型头文件_C++ Primer Chapter2 变量和基本类型
  8. java基础知识查漏 三
  9. Selenium常见异常分析及解决方案
  10. HTML5学习笔记(二十六):JavaScript的错误处理
  11. bzoj2705 [SDOI2012]Longge的问题
  12. echarts 获取点击的y轴数值_ECharts关系图
  13. ffmpeg【百度百科】
  14. 寻找协调器FindCoordinatorRequest请求流程
  15. Google Earth Engine APPS(GEE)——使用 AREA2 和 CODED 估算森林砍伐和退化面积(第 1 部分:运行 CODED)
  16. 如何以应届生的身份进入阿里巴巴?
  17. 虚拟机里博图能连接上实物PLC,但是HMI仿真不能连接实物PLC
  18. 测试小故事52:怎么测?
  19. 谁能够最终实现超越普通计算机的“量子霸权”
  20. aplayer得使用,记一次aplayer/Aplayer开发心得

热门文章

  1. 使用XSSFWorkbook导出excel在微软office中无法打开
  2. MyBatis增加时报错“无效的列类型”
  3. 盘点常用的九种设计模式
  4. 解决了 source insight 设置为 微软雅黑后 中文字体重影
  5. 英语写作替换词与上下文连接词
  6. linux ls命令详解
  7. 推荐几个清北计算机系学霸的 IT 公众号!
  8. (从零开始)基于检测前跟踪雷达目标跟踪技术的研究:第(7)周所学知识(PF-TBD感悟:纯干货,全网你绝对搜不到下面的干货)
  9. 前端开发工具——VScode的使用
  10. 长城人寿2019年保费业绩健康增长,原保费收入同比增长30.70%