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_name
 FROM actor
 GROUP 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 actor
 GROUP BY actor_id
 HAVING salary > 1500
 ORDER BY salary DESC;

在这里插入图片描述

结论

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何让Google收录网站?

Google收录网站的前提条件是确保网站可以公开访问,并且页面加载速度需要快,这样Google爬虫才可以访问到你的网站,并且索引你网站中的内容。实现了上面的前提条件,可以通过优化数据结构、创建站点地图、使用Google Search Console、…

postgressql——PGPROC XLOG(6)

PGPROC相关结构 在共享内存中,核心数据结构围绕PROC_HDR指向的两个list:PROC和XACT PRCO内存连续,维护链表结构方便申请释放,对应每个后台服务进程,PID为OS标识、PGPROCNO为内部标识 XACT内存连续,维护快照需要的xmin和xid,XACT从PROC拆出来是为了更高的cache line命中…

华为诺亚等发布MagicDrive3D:自动驾驶街景中任意视图渲染的可控3D生成

文章链接:https://arxiv.org/pdf/2405.14475 项目链接:https://flymin.github.io/magicdrive3d 虽然可控生成模型在图像和视频方面取得了显著成功,但在自动驾驶等无限场景中,高质量的3D场景生成模型仍然发展不足,主…

排序算法之直接选择排序【图文详解】

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:LiUEEEEE                        …

配置arduino和ESP8266

首先准备好arduino 的IDE和ESP8266的驱动以及板子 1.安装驱动,双击x64的版本驱动,安装好以后,在资源管理器检查端口,比如下下图出现的COM4就是esp8266所使用的端口 2.安装好arduino最好不要在路径中存在中文符号,打开…

计量校准和检定的联系是什么?它们有什么区别?

计量中,计量校准和检定一直形影不离,很多人也会经常搞混两者的定义,不清楚二者的区别,计量校准和检定有什么联系也不明白,因此有时候经常在需要做校准的时候,去花大价钱检定,在需要检定的时候&a…

重生奇迹MU召唤师如何学习狂暴术?

一、了解狂暴术的基本信息 狂暴术是一种非常强大的技能,可以让召唤师的攻击力和防御力大幅度提高,但同时也会增加自身的伤害。在使用狂暴术之前,召唤师需要仔细考虑自己的状态和对手的情况。 二、学习狂暴术的方法 1.通过任务学习 在游戏…

NKCTF 2024 webshell_pro

还是正常的HTTP流量 既然是webshell一定是看POST流量 对每一个进行追踪tcp流 最终发现 在 流9 (tcp.stream eq 9)存在 base32 -->base64的流量的加密逻辑 import base64import libnum from Crypto.PublicKey import RSApubkey """-----BEGIN PUBLIC KEY…

LeeCode热题100(两数之和)

本文纯干货,看不懂来打我! 自己先去看一下第一题的题目两数之和:. - 力扣(LeetCode) 简单来说就是让你在一个数组里面找两个数,这两个数的和必须满足等于目标值target才行。 我认为你要是没有思路的话&a…

骨传导耳机哪一款比较值得入手?年度精选好用骨传导耳机推荐

现在很多年轻人都会选择用骨传导耳机,因为骨传导耳机更加方便,不用入耳,不会伤害到耳朵,对耳膜也没有什么伤害。同时,因为骨传导耳机的结构也比较简单,所以佩戴也会更加舒适。接下来就给大家推荐几款口碑不…

【Python内功心法】:深挖内置函数,释放语言潜能

文章目录 🚀一、常见内置函数🌈二、高级内置函数⭐1. enumerate函数👊2. eval函数❤️3. exec函数💥4. eval与exec 中 globals与locals如何用☔4-1 globals 参数🎬4-2 locals 参数 ❤️5. filter函数👊6. z…

【机器学习】智能选择的艺术:决策树在机器学习中的深度剖析

在机器学习的分类和回归问题中,决策树是一种广泛使用的算法。决策树模型因其直观性、易于理解和实现,以及处理分类和数值特征的能力而备受欢迎。本文将解释决策树算法的概念、原理、应用、优化方法以及未来的发展方向。 🚀时空传送门 &#x…

解决Windows 10通过SSH连接Ubuntu 20.04时的“Permission Denied”错误

在使用SSH连接远程服务器时,我们经常可能遇到各种连接错误,其中“Permission denied, please try again”是较为常见的一种。本文将分享一次实际案例的解决过程,帮助你理解如何排查并解决这类问题。 问题描述 在尝试从Windows 10系统通过SS…

如何设置手机的DNS

DNS 服务器 IP 地址 苹果 华为 小米 OPPO VIVO DNS 服务器 IP 地址 中国大陆部分地区会被运营商屏蔽网络导致无法访问,可修改手机DNS解决。 推荐 阿里的DNS (223.5.5.5)或 114 (114.114.114.114和114.114.115.115) 更多公开DNS参考: 苹果…

一个浏览器插件,绕过限制,登录微信网页版!

摘要 早在2017年开始,微信网页版就已经住逐渐开始停止登录,以为了保障你的账号安全为由引导你使用电脑版微信。具体如下: 当然这个影响并不是所有账号,还是有一些账号不明觉厉地没有被影响到,我自己有2个号都还是可以…

记一次服务器数据库被攻击勒索

如图,早上一起来就发现,我的MongoDB数据库里面的信息全部没有了,只留下一段话。 大致意思就是:我的数据库的数据被他们备份然后全部删掉了,我必须要支付0.0059的bitcoin(折合400美刀)来赎回我的…

自动化桌面整理新时代:Llama 3驱动的智能文件管理系统

在信息爆炸的时代,个人和企业用户的电脑桌面常常被海量文件占据,导致查找特定文件如同大海捞针。为了解决这一痛点,Llama 3应运而生——一个集成了先进多模态AI技术的智能文件管家,旨在将杂乱无章的文件世界变得井然有序。本文将深入探讨Llama 3如何利用其创新功能,不仅自…

详解生成式人工智能的开发过程

回到机器学习的“古老”时代,在您可以使用大型语言模型(LLM)作为调优模型的基础之前,您基本上必须在所有数据上训练每个可能的机器学习模型,以找到最佳(或最不糟糕)的拟合。 开发生成式人工智能…

代码随想录算法训练营第36期DAY44

DAY44 闫氏DP 2 01背包问题 用滚动数组来优化空间&#xff0c;从后向前&#xff08;大到小&#xff09;遍历j #include<iostream>using namespace std;const int N1010;int n,m;int v[N],w[N];int f[N][N];//所有只考虑前i个物品&#xff0c;**且总体积不超过j**的选法…

【原创】springboot+mysql医院预约挂号管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…