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 跨节点关联…

【退役之重学 SQL】什么是笛卡尔积

一、初识笛卡尔积 概念: 笛卡尔积是指在关系型数据库中,两个表进行 join 操作时,没有指定任何条件,导致生成的结果集,是两个表中所有行的组合。 简单来说: 笛卡尔积是两个表的乘积,结果集中的每…

力扣 454题 四数相加Ⅱ 记录

题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0示例 1&#xff1a; 输入&#xff1a;nums1 …

Flutter 中的 SliverOpacity 小部件:全面指南

Flutter 中的 SliverOpacity 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言来构建高性能、美观的跨平台应用。在 Flutter 的滚动组件体系中&#xff0c;SliverOpacity 是一个用来为其子 Slive…

强化学习中Q值的概念

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

RabbitMQ小结

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

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

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

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

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

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…

spring项目修改时间格式

一、配置方式 在application.yml上添加 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8 二、注解方式 1、添加依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId&…

解释def __int__(self):和def __init__(self):的区别

文章目录 __init__ 方法例子 __int__ 方法例子 总结 def __int__(self): 和 def __init__(self): 是Python中两个不同的特殊方法&#xff08;或魔法方法&#xff09;&#xff0c;它们有着不同的用途和含义。 __init__ 方法 作用&#xff1a;__init__ 方法是类的构造函数。当你…

大文件分片【笔记】

createChunk.js Spark-md5计算文件各分片MD5生成文件指纹 可以帮助我们更加方便地进行文件哈希计算和文件完整性检测等操作。 import sparkMd5 from ./sparkmd5.jsexport function createChunk(file, index, chunkSize) {return new Promise((resolve, reject) > {const sta…

整理好了!2024年最常见 20 道 Kafka面试题(一)

一、什么是Apache Kafka&#xff0c;它主要用于什么场景&#xff1f; Apache Kafka是一个分布式流处理平台&#xff0c;最初由LinkedIn开发&#xff0c;后来成为Apache软件基金会的一个开源项目。它被设计为一个高吞吐量、可扩展、容错的消息队列系统&#xff0c;能够处理实时…

【java】【python】leetcode刷题记录--栈与队列

232 用栈实现队列 题目描述 两个栈模拟队列的思路是利用栈&#xff08;后进先出结构&#xff09;的特性来实现队列&#xff08;先进先出结构&#xff09;的行为。这种方法依赖于两个栈来逆转元素的入队和出队顺序&#xff0c;从而实现队列的功能。 入队操作&#xff08;使用s…

GIS、GPS、RS综合应用

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

前端技术专家岗(虚拟岗)

定位&#xff1a; 团队技术负责人、技术领导者&#xff1b;确保框架、工具的低门槛、高性能、可扩展&#xff1b; 素质要求&#xff1a; 具备架构设计能力&#xff1b;一个或者多个领域的技术专家&#xff1b;较为丰富的基础建设经验&#xff1b;项目管理能力、任务分解、协…

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

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

1211. 查询结果的质量和占比

1211. 查询结果的质量和占比 题目链接&#xff1a;1211. 查询结果的质量和占比 代码如下&#xff1a; # Write your MySQL query statement below select query_name,round(avg(rating/position),2) as quality,round(sum(if(rating<3,1,0))*100/count(*),2) as poor_quer…