Mysql基础教程(13):GROUP BY

MySQL GROUP BY

【 GROUP BY】 子句用于将结果集根据指定的字段或者表达式进行分组

有时候,我们需要将结果集按照某个维度进行汇总。这在统计数据的时候经常用到,考虑以下的场景:

  • 按班级求取平均成绩。
  • 按学生汇总某个人的总分。
  • 按年或者月份统计销售额。
  • 按国家或者地区统计用户数量。

GROUP BY语法

【GROUP BY】 子句是 SELECT 语句的可选子句。 GROUP BY 子句语法如下:

SELECT column1[, column2, ...], aggregate_function(ci)
FROM table
[WHERE clause]
GROUP BY column1[, column2, ...];
[HAVING clause]

说明:

  • 【column1[, column2, ...]】 是分组依据的字段,至少一个字段,可以多个字段。
  • 【aggregate_function(ci)】 是聚合函数。这是可选的,但是一般都用得到。
  • 【SELECT】 后的字段必须是分组字段中的字段。
  • 【WHERE 】子句是可选的,用来过滤结果集中的数据。
  • 【HAVING】 子句是可选的,用来过滤分组数据。

经常使用的聚合函数主要有:

  • SUM(): 求总和
  • AVG(): 求平均值
  • MAX(): 求最大值
  • MIN(): 求最小值
  • COUNT(): 计数

GROUP BY实例

简单的GROUP BY 实例

创建actor

DROP TABLE IF EXISTS `actor`;
CREATE TABLE `actor`  (`actor_id` int(11) NOT NULL AUTO_INCREMENT,`last_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`first_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`gender` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '男',`age` int(11) NOT NULL,PRIMARY KEY (`actor_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

插入数据

INSERT INTO `actor` VALUES (1, '李', '小龙', '男', 33);
INSERT INTO `actor` VALUES (2, '刘', '德华', '男', 60);
INSERT INTO `actor` VALUES (3, '梁', '朝伟', '男', 58);
INSERT INTO `actor` VALUES (4, '张', '家辉', '男', 55);
INSERT INTO `actor` VALUES (5, '刘', '嘉玲', '女', 58);
INSERT INTO `actor` VALUES (6, '周', '润发', '男', 60);
INSERT INTO `actor` VALUES (7, '古', '天乐', '男', 58);
INSERT INTO `actor` VALUES (8, '吴', '京', '男', 48);
INSERT INTO `actor` VALUES (9, '周', '也', '女', 24);
INSERT INTO `actor` VALUES (10, '周', '星驰', '男', 59);SET FOREIGN_KEY_CHECKS = 1;

查看actor表中的姓氏列表

 SELECT last_nameFROM actorGROUP BY last_name;

在这里插入图片描述

本例中,使用 【GROUP BY 】句按照 last_name 字段对数据进行分组。

本例的输出结果与以下使用 DISTINCT 的 SQL 输出结果完全一样:

SELECT DISTINCT last_name FROM actor;

GROUP BY 与聚合函数实例

我们使用 【GROUP BY 】子句和聚合函数 【COUNT() 】查看 actor 表中的姓氏列表以及每个姓氏的次数。

SELECT last_name, COUNT(*)
FROM actor
GROUP BY last_name
ORDER BY COUNT(*) DESC;

在这里插入图片描述

本例中,执行顺序如下:

  1. 首先使用 GROUP BY 子句按照 last_name 字段对数据进行分组。
  2. 然后使用聚合函数 COUNT(*) 汇总每个姓氏的行数。
  3. 最后使用 ORDER BY 子句按照 COUNT(*) 降序排列。

这样,数量最多的姓氏排在最前面。

GROUP BY 和 HAVING 实例

统计演员片酬大于【1500W】的演员有哪些

 SELECT *from actorGROUP BY actor_idHAVING salary > 1500ORDER BY salary DESC;

在这里插入图片描述

结论

在本文中,我们介绍了在 MySQL 中使用 GROUP BY 子句将结果集根据指定的列或者表达式进行分组。以下是 GROUP BY 子句的要点:

  • GROUP BY 子句用于将结果集根据指定的字段或者表达式进行分组。
  • GROUP BY 子句的分组字段或表达式至少一个,可以多个。
  • HAVING 子句是可选的,用来过滤分组数据。
  • GROUP BY 子句经常用于数据统计汇总,通常使用聚合函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“世界酒中国菜”系列活动如何助推乡村振兴和文化交流?

"世界酒中国菜"系列活动如何助推乡村振兴和文化交流? 《经济参考报》(2024年5月24日 第6版) 新华社北京(记者 张晓明) “世界酒中国菜”系列活动自启动以来,已在国内外产生了广泛影响。这一国家…

mysql面试之分库分表总结

文章目录 1.为什么要分库分表2.分库分表有哪些中间件,不同的中间件都有什么优点和缺点?3.分库分表的方式(水平分库,垂直分库,水平分表,垂直分表)3.1 水平分库3.2 垂直分库3.3 水平分表3.4 垂直分表 4.分库分表带来的问题4.1 事务一致性问题4.2 跨节点关联…

强化学习中Q值的概念

在强化学习中,Q值是一个非常核心的概念,用来表示在给定的状态下,采取某个特定动作所期望获得的总回报。Q值基本上是一种衡量“动作价值”的方式,即在当前状态采取一个动作能带来多大价值。 定义和计算 Q值通常表示为 (Q(s, a))&…

RabbitMQ小结

MQ分类 Acitvemq kafka 优点:性能好,吞吐量高百万级,分布式,消息有序 缺点:单机超过64分区,cpu会飙高,消费失败不支持重试 , Rocket 阿里的mq产品 优点:单机吞吐量也…

香橙派 Kunpeng Pro:基于ncnn的深度学习模型量化与部署实践

一 引言 近10年里以深度学习为代表的机器学习技术在图像处理,语音识别,自然语言处理等领域里取得了非常多的突破,其背后的核心算法是深度学习为代表的AI基础模型。 一般来讲,我们进行AI项目研发时,遵循三个步骤。 第…

LabVIEW步进电机的串口控制方法与实现

本文介绍了在LabVIEW环境中通过串口控制步进电机的方法,涵盖了基本的串口通信原理、硬件连接步骤、LabVIEW编程实现以及注意事项。通过这些方法,用户可以实现对步进电机的精确控制,适用于各种自动化和运动控制应用场景。 步进电机与串口通信…

python3.8环境下安装pyqt5

1.实验目的 测试python可视化工具包pyqt5,为后期做系统前端页面做铺垫 2.实验环境 1.软件 anaconda2.5 pycharm2024.1.1 pyqt5 2.硬件 GPU 4070TI Intel I7 1400K 3. 安装步骤 (base) C:\Users\PC>conda -V conda 23.7.4(base) C:\Users\PC>conda create qttest p…

GIS、GPS、RS综合应用

刘老师(副教授),北京重点高校资深专家,拥有丰富的科研及工程技术经验,长期从事3S在环境中的应用等领域的研究和教学工作,具有资深的技术底蕴和专业背景。 第一章、3S 技术及应用简介 1.1、3S 技术及集成简…

跨模型知识融合:大语言模型的知识融合

大语言模型(LLMs)在多个领域的应用日益广泛,但确保它们的行为与人类价值观和意图一致却充满挑战。传统对齐方法,例如基于人类反馈的强化学习(RLHF),虽取得一定进展,仍面临诸多难题&a…

wandb安装与使用 —— 用于跟踪、可视化和协作机器学习实验的工具

文章目录 一、wandb简介二、wandb注册与登陆(网页) —— 若登录,则支持在线功能三、wandb安装与登陆(命令行) —— 若不登录,则只保留离线功能四、函数详解4.1、wandb.init() —— 初始化一个新的 wandb 实…

上位机图像处理和嵌入式模块部署(f407 mcu中fatfs中间件使用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们已经实现了spi norflash的驱动,理论上这已经可以实现数据的持久化保存了。为什么还需要一个文件系统呢?主要原因还…

在 Win系统安装 Ubuntu20.04子系统 WSL2 (默认是C盘,第7步开始迁移到D盘,也可以不迁移)

1、简介 WSL在Windows 10上原生运行Linux二进制可执行文件,不用单独安装虚拟机。 WSL2是WSL的第二个版本,提供了与WSL相比的显著性能改进和完全的系统呼叫兼容性。通过运行Linux内核在一个轻量级虚拟机(VM)中实现。 2、安装 电…

ThingsBoard MQTT 连接认证过程 源码分析+图例

整个连接过程如图所示: 高清图片链接 1、环境准备 thingsboard3.5.1 源码启动。(不懂怎么启动的,大家可以看我的博文ThingsBoard3.5.1源码启动)MQTTX 客户端(用来连接 thingsboard MQTT)默认配置。queue.…

7-15 位模式(dump_bits)---PTA实验C++

一、题目描述 为方便调试位运算相关程序,先做个展现位模式的小工具。 建议参照以下接口实现: // 利用函数重载特性:string dump_bits(char x);string dump_bits(short x);string dump_bits(int x);string dump_bits(long long x);// 或用函…

JVM类加载过程

在Java虚拟机规范中,把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java.lang.Class对象,这个过程被称作类加载过程。一个类在整个虚拟机周期内会经历如下图的阶段&…

DIYP对接骆驼后台IPTV管理,退出菜单中显示用户名已经网络信息,MAC,剩余天数,套餐名称等

演示:https://url03.ctfile.com/f/1779803-1042599473-4dc000?p8976 (访问密码: 8976) 后台加上EPG,增加一些播放源的动态端口替换。 前台app上,退出菜单中显示用户名已经网络信息,MAC,剩余天数,套餐名称…

Python知识点17---包

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python的包,你可以把它看成是一个大的模块,它…

JAVA基础|多线程

什么是线程? 线程(Thread)是一个程序内部的一条执行流程。 多线程是什么? 多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行) 一. 如何在程序中创建出多条线程? Ja…

Windows10系统中安装与配置PyTorch(无GPU版本)

文章目录 1. 什么是PyTorch2. PyTorch的安装与配置(无GPU)2.1 创建环境2.2 安装pytorch库(无GPU)2.3 验证安装结果 1. 什么是PyTorch PyTorch 是一种用于构建深度学习模型且功能完备的开源框架,通常用于处理图像识别和…