注册 登录
MySQL基础教程

第一章: 环境搭建,安装MySQL

第二章: 掌握数据库的核心概念

第三章: MySQL服务与Show命令

第四章: 创建数据库与数据表

第五章: MySQL增查改删

第六章: 在Python中操作MySQL

首页 > MySQL基础教程 > 第五章: MySQL增查改删 > 5.6节: SELECT GROUP BY查询

5.6节: SELECT GROUP BY查询

薯条老师 2021-12-03 16:33:44 160387 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师的线下Python,Java小班周末班已经开课了,培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Java后端开发。授课详情请点击:http://chipscoco.com/?cate=6

5.6.1 SELECT的GROUP BY查询

所谓分组查询,是指将查询到的结果根据一个或多个列进行分组。

SQL语法1:

SELECT expr FROM tbl_references GROUP BY expr;

在分组查询中,可以对每组结果进行聚合统计,常用的统计量有总数,均值,最大值,最小值等。下表所示为MySQL中常用的聚合函数:

聚合函数 

描述

count

统计数据总数

max

统计最大值

min

统计最小值

avg

统计平均值

在使用聚合函数时,需将待聚合统计的列名作为参数进行传递,也可以直接使用通配符*或任意数字进行代替(通常为1),例如count(*)或count(1)。

SQL语法2:

SELECT expr FROM tbl_references GROUP BY expr HAVING where_condition

在分组查询中可以通过HAVING关键字对分组后的结果进行筛选,HAVING后的where_condition表示筛选条件。having同where的主要区别在于,having是对分组查询后的结果进行筛选,而where是对分组前的所有记录进行筛选,即先执行where,再执行having。

5.6.2 SELEC GROUP BY查询实例

(1)查询商品表中的记录,根据name字段进行分组,并统计每组的数量

mysql> select name,count(*) from goods group by name;
+--------------+----------+
| name         | count(*) |
+--------------+----------+
| 黑人牙膏     |        1 |
| 云南白药     |        4 |
| 青岛啤酒     |        1 |
| 湖南辣条     |        1 |
+--------------+----------+
4 rows in set (0.00 sec)

(2) 查询商品表中的记录,根据name字段进行分组,并统计每组的数量,价格总和,价格的平均值

mysql> select name, sum(price), count(price), avg(price) from goods group by name;
+--------------+------------+--------------+------------+
| name         | sum(price) | count(price) | avg(price) |
+--------------+------------+--------------+------------+
| 黑人牙膏     |         25 |            1 |         25 |
| 云南白药     |         89 |            4 |      22.25 |
| 青岛啤酒     |         28 |            2 |         14 |
| 湖南辣条     |         38 |            1 |         38 |
+--------------+------------+--------------+------------+

(3) 基于(2),为聚合统计的每一列取一个可读性强的别名

mysql> select name as "商品名", sum(price) as "总和", count(1) as "数量",avg(price) as "均价" from goods group by name;
+--------------+--------+--------+--------+
| 商品名       | 总和   | 数量   | 均价   |
+--------------+--------+--------+--------+
| 黑人牙膏     |     25 |      1 |     25 |
| 云南白药     |     89 |      4 |  22.25 |
| 青岛啤酒     |     28 |      2 |     14 |
| 湖南辣条     |     38 |      1 |     38 |
+--------------+--------+--------+--------+
4 rows in set (0.00 sec)

(4) 对分组后的结果使用HAVING子句进行筛选

统计每组中的最小价格大于20的组别的最小价格以及数量:

mysql> select name, min(price), count(price) from goods group by name having(min(price)) > 20;
+--------------+------------+--------------+
| name         | min(price) | count(price) |
+--------------+------------+--------------+
| 黑人牙膏     |         25 |            1 |
| 湖南辣条     |         38 |            1 |
+--------------+------------+--------------+
2 rows in set (0.00 sec)

(5) 先通过where子句筛选,然后再进行分组筛选

先通过where筛选掉所有id小于等于3的记录,然后再根据name字段分组统计: 统计每组中的最小价格大于20的组别的最小价格以及数量

mysql> select name, min(price), count(price) from goods where id > 3 group by name having(min(price)) > 20;
+--------------+------------+--------------+
| name         | min(price) | count(price) |
+--------------+------------+--------------+
| 湖南辣条     |         38 |            1 |
| 青岛啤酒     |         21 |            1 |
+--------------+------------+--------------+
2 rows in set (0.00 sec

5.6.3 高薪就业班

(1) Python后端工程师高薪就业班,月薪10K-15K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪10K-20K, 免费领取课程大纲
(4) Python大数据工程师就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取学习资料:




欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录