MYSQL数据分组(十三)GROUP BY
MySQL GROUP BY子句
GROUP BY子句是 SELECT 语句的可选部分,它将一组行记录按列或表达式的值分组成摘要行记录。GROUP BY子句返回每个分组的一个行记录。换句话说,它减少了在结果集中的行数。
我们经常使用GROUP BY子句在聚合函数中使用,如:SUM, AVG, MAX, MIN, 和 COUNT。聚合函数出现在SELECT子句中并提供有关每分组的信息。
以下说明了 GROUP BY 子句的语法:
SELECT c1, c2,..., cn, aggregate_function(ci)
FROMtable
WHEREwhere_conditions
GROUP BY c1 , c2,...,cn;
GROUP BY 子句必须在 FROM 和 WHERE 子句后出现。 在GROUP BY 关键字之后要使用逗号分隔列或表达式列表作为标准分组行。
MySQL GROUP BY示例
让我们来看看示例数据库中的orders
表。
假设我们要使用 order 表中的 status 字段作为分组字段,使用 GROUP BY子句的 status 列如下面的查询所示:
SELECT status
FROMorders
GROUP BY status;
结果如下:
我们可以看到,GROUP BY子句返回 status 值的唯一匹配项。它的工作原理类似下面显示的 DISTINCT 运算符查询:
SELECT DISTINCTstatus
FROMorders;
MySQL GROUP BY与聚合函数
聚合函数允许我们执行某组行的计算并返回一个值。 GROUP BY子句通常与聚合函数来执行计算,并为每个分组返回一个值。
例如,如果我们想知道每一种状态有多少个订单,可以使用COUNT函数与 GROUP BY 子句如下:
SELECT status, COUNT(*)
FROMorders
GROUP BY status;
结果如下:
见下表orders
和orderdetails
表。
要通过订单状态查询所有订单的总金额,这里 order 表需要连接 order_detail 表,并使用SUM函数来计算总额。请参考下面的查询:
SELECT status, SUM(quantityOrdered * priceEach) AS amount
FROMordersINNER JOINorderdetails USING (orderNumber)
GROUP BY status;
结果如下:
下面的查询返回订单号和每个订单的总额。
SELECT orderNumber,SUM(quantityOrdered * priceEach) AS total
FROMorderdetails
GROUP BY orderNumber;
结果如下:
MySQL GROUP BY与表达式示例
除了列,我们可以通过表达式来进行分组行。下面的查询获取每月的销售总额。我们使用 YEAR 函数从订单日期(order_date 字段)中提取年份信息。我们只查询发货状态是完成的订单。请注意,该表达式出现在SELECT子句中必须与在 GROUP BY 子句中一样。
SELECT YEAR(orderDate) AS year,SUM(quantityOrdered * priceEach) AS total
FROMordersINNER JOINorderdetails USING (orderNumber)
WHEREstatus = 'Shipped'
GROUP BY YEAR(orderDate);
结果如下:
MySQL GROUP BY与HAVING
要筛选由 GROUP BY 子句返回分组行,我们使用 HAVING 子句。下面是使用 HAVING 子句查询2012年之后的年份的总销售额。
SELECT YEAR(orderDate) AS year,SUM(quantityOrdered * priceEach) AS total
FROMordersINNER JOINorderdetails USING (orderNumber)
WHEREstatus = 'Shipped'
GROUP BY year
HAVING year > 2003;
结果如下:
MySQL和标准SQL中的GROUP BY子句
标准SQL不允许我们在GROUP BY
子句中使用别名,但MySQL支持这一点。下面的查询语句是从订单日期提取年份并计算每年的订单数量。year 被使用作为表达式 YEAR(orderDate) 的别名。我们用 year 这个别名在GROUP BY子句中。但是这样的用法在查询标准SQL中是非法的。
SELECT YEAR(orderDate) AS year, COUNT(orderNumber)
FROMorders
GROUP BY year;
结果如下:
MySQL也允许我们按升序或降序对分组的订单行记录进行排序,而标准SQL是不可以的,它默认顺序是升序。例如,如果我们想要查询每种订单状态的订单数量并按订单状态(status 字段)降序排列,可以使用GROUP BY 子句及 DESC,如下查询:
SELECT status, COUNT(*)
FROMorders
GROUP BY status DESC;
结果如下:
注意,我们使用 DESC 在GROUP BY子句之后,来按订单状态(status 字段)进行降序排序。我们可以在 GROUP BY 子句之后明确指定使用 ASC 来按订单状态(status 字段)升序排序。
MYSQL数据分组(十三)GROUP BY相关推荐
- mysql 数据分组_详解MySQL 数据分组
创建分组 分组是在select语句中的group by 子句中建立的. 例: select vend_id, count(*) as num_prods from products group by ...
- 【Python数据分析与处理 实训03】 --- 酒类消费信息分析(数据分组聚合 group().agg()应用)
[Python数据分析与处理 实训03] - 酒类消费信息分析(数据分组聚合 group().agg()应用) 探索酒类消费信息 对于下面的数据集进行简单的一些数据的分析训练 若需要源数据请私信~ 1 ...
- MySQL数据分组与查询
一 . 多表连接查询: 连接是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获得数据 N个表相连时,至少需要N-1个连接条件 笛卡尔积: select emp.empno,emp ...
- MySQL入门 - 数据分组之 group by
作者:汤圆学Java 个人博客:https://www.javalover.cc/ 前言 group by 用来对数据进行分组,即按照指定的字段或者表达式进行分组: 目录 group by 语句介绍 ...
- MySQL数据库分组查询group by(having)
1. 分组查询介绍 分组查询就是将查询结果按照指定字段进行分组,字段中数据相等的分为一组. 分组查询基本的语法格式如下: GROUP BY 列名 [HAVING 条件表达式] [WITH ROLLUP ...
- mysql的select的排序_mysql数据分组和排序及SELECT子句顺序
mysql分组和排序 虽然 GROUP BY 和 ORDER BY 经常完成相同的工作,但它们是非常不同的.下表汇总了它们之间的差别. 表中列出的第一项差别极为重要.我们经常发现用 GROUP BY ...
- MySQL:基础—数据分组
MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...
- mysql单列去重复group by分组取每组前几条记录加order by排序
<div class="post"><h1 class="postTitle"><a id="cb_post_title ...
- mysql 分组查询例子_分组查询GROUP BY用法例子详解
GROUP BY在mysql中是分组查询了,那么你对于GROUP BY有了解多少呢,下面我们来看一篇关于GROUP BY使用例子,具体的细节如下所示. 在SQL中使用GROUP BY来对SELECT的 ...
最新文章
- 用Js的eval解析JSON中的注意点
- boost::callable_traits的remove_member_reference_t的测试程序
- [转]C#中多路IP摄像机的视频监控系统
- 李航《统计学习方法》之HMM隐马尔可夫模型
- 详解HelloWorldBasic实例
- mybatis注解开发_Spring Boot 中集成 MyBatis
- 微信小程序|开发实战篇之九-image-picker图片选择器组件及其子组件
- WPF通用窗体模板【2】
- 用python求两个人的平均身高_黄哥Python:分治算法(Divide-and-Conquer)
- memcached部署安装文档
- 全网首发:成功在loongarch64上编译成功jogamp(提供下载库)
- java jquery分页_如何最简单的实现java分页
- Ubuntu下gcc安装及使用
- 摩申网络:浅析网络棋牌游戏用户群体
- 使用containerd管理容器【同docker】【或称之为docker替代品】
- ios 拍照上传到服务器_iOS 上传图片到服务器
- mysql8.017安装教程_mysql 8.0.17 安装图文教程
- 计算机网络应用赛甘肃省,关于举办第三届“甘肃省大学生创新杯计算机运用能力竞赛”预赛的.doc...
- Linux负载均衡脚本,linux负载均衡软件设置(一)
- Linux从头开始搭建Redis集群(三种方式)
热门文章
- 使用计算机求解雷达方程,关于雷达方程
- 状态压缩 动规 海贼王 大作业
- matlab三元函数泰勒展开,如何用matlab绘制三元函数f(x,y,z)=x^2 y^3 z^4在[-1,1]x[-2,2]x[-3,3] 上的各...
- ubuntu虚拟机使用笔记——5、vim保存并退出
- 基于HTML5 Canvas 点击添加 2D 3D 机柜模型
- 探索人工智能音乐的未来:从算法到文化
- TeamViewer经验介绍
- CISSP复习笔记-第8章 业务连续性与灾难恢复
- html简易颜色选择器,HTML颜色选择器实现代码
- 浪潮服务器文件管理nas,架构浪潮NAS与SAN网络存储方案(图)