【重学 MySQL】三十八、group by的使用

【重学 MySQL】三十八、group by的使用

  • 基本语法
  • 示例
    • 示例 1: 计算每个部门的员工数
    • 示例 2: 计算每个部门的平均工资
    • 示例 3: 结合 WHERE 子句
  • `WITH ROLLUP`
    • 基本用法
    • 示例
    • 注意事项
  • 注意事项

在这里插入图片描述
GROUP BY 是 SQL 中一个非常重要的子句,它通常与聚合函数(如 COUNT(), MAX(), MIN(), SUM(), AVG() 等)一起使用,用于将多个记录组合成汇总行。GROUP BY 通过一个或多个列对结果集进行分组,并可以对每个分组应用聚合函数。

基本语法

SELECT column_name(s), AGGREGATE_FUNCTION(column_name)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
  • column_name(s): 你想要选择的列。
  • AGGREGATE_FUNCTION(column_name): 应用于 column_name 的聚合函数。
  • table_name: 你要从中选择数据的表。
  • condition: 用于选择记录的条件(可选)。
  • GROUP BY column_name(s): 指定根据哪些列来分组结果。
  • ORDER BY column_name(s): 可选,用于对结果进行排序。

示例

假设我们有一个名为 employees 的表,它包含以下列:id, name, department, 和 salary

示例 1: 计算每个部门的员工数

SELECT department, COUNT(*) AS num_employees
FROM employees
GROUP BY department;

这个查询会返回每个部门以及该部门的员工数。

示例 2: 计算每个部门的平均工资

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

这会显示每个部门的平均工资。

示例 3: 结合 WHERE 子句

如果你只想查看某些部门的统计信息,你可以结合使用 WHERE 子句:

SELECT department, COUNT(*) AS num_employees
FROM employees
WHERE salary > 5000
GROUP BY department;

这个查询会返回工资超过 5000 的员工所在的部门以及每个部门的员工数。

WITH ROLLUP

MySQL中的GROUP BY ... WITH ROLLUP是一个强大的功能,它允许你执行聚合查询,并在结果集的末尾自动添加更高级别的汇总行。这些汇总行是通过对前面分组的结果进行进一步聚合得到的,从而提供了一种方便的方式来查看数据的不同层次的总计。

基本用法

当你使用GROUP BY ... WITH ROLLUP时,MySQL会生成一个包含所有指定列的分组结果集,并在结果集的末尾添加一个或多个汇总行。这些汇总行按照你在GROUP BY子句中指定的列的顺序进行汇总。对于每个汇总级别,它都会移除前面的列,并对剩余的列进行汇总。

示例

假设你有一个名为sales的表,其中包含yearproductamount三个字段,分别代表销售年份、产品名称和销售金额。

CREATE TABLE sales (year INT,product VARCHAR(50),amount DECIMAL(10, 2)
);INSERT INTO sales (year, product, amount) VALUES
(2020, 'Product A', 100.00),
(2020, 'Product B', 200.00),
(2021, 'Product A', 150.00),
(2021, 'Product B', 250.00);

如果你想按年份和产品分组查看销售金额,并在最后添加按年份的总计和所有记录的总计,你可以这样做:

SELECT year, product, SUM(amount) AS total_sales
FROM sales
GROUP BY year, product WITH ROLLUP;

这将生成如下结果(结果顺序可能略有不同,取决于MySQL的实现):

+------+-----------+-------------+
| year | product   | total_sales |
+------+-----------+-------------+
| 2020 | Product A | 100.00      |
| 2020 | Product B | 200.00      |
| 2020 | NULL      | 300.00      |  -- 2020年总计
| 2021 | Product A | 150.00      |
| 2021 | Product B | 250.00      |
| 2021 | NULL      | 400.00      |  -- 2021年总计
| NULL | NULL      | 700.00      |  -- 所有记录总计
+------+-----------+-------------+

在这个例子中,WITH ROLLUP首先按yearproduct分组计算每个产品的销售总额,然后在每个年份的末尾添加该年份的总计(此时product列为NULL),最后在结果集的末尾添加所有记录的总计(此时yearproduct列均为NULL)。

注意事项

  • 使用WITH ROLLUP时,应确保你的SQL查询可以处理NULL值,因为汇总行会包含NULL值。
  • WITH ROLLUP可以与其他聚合函数(如COUNT(), AVG(), MIN(), MAX()等)一起使用。
  • 在结果集中,你可能需要使用COALESCEIFNULL等函数来处理或忽略NULL值,特别是在进行进一步的计算或展示时。

注意事项

  • SELECT 中出现的非组函数的字段必须声明在 GROUP BY 中,反之,GROUP BY 中声明的字段可以不出现在 SELECT 中。
  • GROUP BY 必须声明在 FROM 后面、WHERE 后面、ORDER BY 前面、LIMIT 前面
  • 当使用 WITH ROLLUP 时,不能同时使用 ORDER BY 子句进行结果排序,即 WITH ROLLUPORDER BY 是互相排斥的
  • SELECT 列表中,除了聚合函数外,只能包含 GROUP BY 子句中指定的列。
  • 如果在 SELECT 列表中包含了非聚合列且这些列未出现在 GROUP BY 子句中,那么查询将不会执行,并会报错(在某些数据库系统中,如 MySQL 的旧版本,这可能会静默地工作,但返回的结果可能不是你所期望的)。
  • 聚合函数用于对 GROUP BY 子句产生的每个分组执行计算。
  • 可以通过 HAVING 子句对分组后的结果进行过滤,这与 WHERE 子句不同,WHERE 在数据分组前进行过滤。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C++ -缺省参数-详解

博客主页:【夜泉_ly】 本文专栏:【C】 欢迎点赞👍收藏⭐关注❤️ C -缺省参数-详解 1.是什么2.分类2.1全缺省参数2.2半缺省参数: 3.实际应用4.关于缺省参数的声明与定义5.总结 1.是什么 先来看看下面这段代码: #incl…

HTML5简介的水果蔬菜在线商城网站源码系列模板3

文章目录 1.设计来源1.1 主界面1.2 商品列表1.3 商品信息1.4 购物车1.5 其他页面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.ne…

JavaScript 类型转换:数字转换和 Symbol 类型转换

数字转换 将数据类型转换为数字称为数字转换,可以使用Number()、parseInt()、parseFloat()等方法将数据类型显式转换为数字。当一个值不能被强制转换为一个数字时,就会返回 NaN。 1. 字符串 > 数字: 当把字符串转换为数字时&#xff0c…

2024年双十一有哪些值得入手的好物?2024年双十一必买物品推荐

2024年的双十一购物季将是一个精彩的时刻,各大电商平台将推出一系列精品数码产品,包括最新款的智能手机、笔记本电脑、平板电脑、智能手表等等。这些产品不仅拥有时尚的外观和高端的配置,而且还能够满足消费者多种多样的需求,比如…

windows11上超详细JDK17安装教程

1.下载安装包,访问官网地址​: https://www.oracle.com/java/technologies/downloads/#java172、选择jdk-17_windows-x64_bin.exe Installer。 3、接着等待下载,下载完成后双击进行安装 4、点击下一步 5、这里可以选择安装位置 6、等待安装 7、安…

24年最新Stable Diffusion之最全详解图解

前言 1. Stable Diffusion介绍 1.1 研究背景1.2 学术名词 2.Stable Diffusion原理解析 2.1 技术架构2.2 原理介绍 扩散过程 3.1 Diffusion前向过程3.2 Diffusion逆向(推断)过程 本次教程将使用AI绘画工具 Stable Diffusion 进行讲解,如还未…

超详细超实用!!!AI编程之cursor配置中文(一)

云风网 云风笔记 云风知识库 一、配置中文扩展 打开扩展,搜索chinese,安装chinese(simplified) 简体中文语言包,重启即可 二、配置中文方法二 使用快捷键组合【CtrlShiftp】,在搜索框中输入configure display language,选择中文也可配置中文 三、配置…

近几年来说最有效率的编程语言和市场最认可的编程语言分别是什么?

在过去的几年中,编程语言的效率和市场认可度在不断演变。不同的语言适用于不同的领域和场景,因而编程语言的“效率”和“市场认可”需要根据具体应用来分析。本文将从两个角度入手,分别探讨近几年中被认为最有效率和最受市场认可的编程语言。…

开源语音实时交互新突破:LLaMA-Omni实现大语言模型无缝语音交互

像 GPT-4o 这样的模型通过语音实现了与大型语言模型(LLMs)的实时交互,与基于文本的传统交互相比,显著提升了用户体验。然而,目前在如何构建基于开源 LLMs 的语音交互模型方面仍缺乏探索。为了解决这个问题,…

如何精准计算:大型语言模型(LLM)部署到底需要多少GPU内存?

在几乎所有关于大型语言模型(LLM)的访谈中,总有一个问题反复出现:“部署 LLM 需要多少 GPU 内存?” 这个问题并非偶然,它是衡量您对这些强大模型在实际生产环境中部署和扩展能力理解程度的关键指标。 当您…

Transformer推理结构简析(Decoder + MHA)

一、Transformer 基本结构 Transformer由encoder和decoder组成,其中: encoder主要负责理解(understanding) The encoder’s role is to generate a rich representation (embedding) of the input sequence, which the decoder c…

国内短剧cps系统和短剧(播放)系统的区别,附各源码部署教程

国内短剧项目主要分为两大形式:一种是做短剧播放平台,让用户付费观看;另一种是做短剧的分销,就是将他人的平台短剧推广,可做平台可入驻,拿分成。 首先来说一下短剧播放平台(短剧系统&#xff0…

828华为云征文|华为云服务器Flexus X 搭建BTC虚拟币质押投资理财系统(仅测试学习)

一、华为云服务器Flexus X 选购和介绍 强大性能,引领云服务新潮流 柔性算力,满足多样化需求 Flexus X实例的部署与管理过程也非常便捷。用户只需在华为云官网注册账号,选择适合的Flexus X实例规格,完成购买后即可开始部署。华为…

telnet ftp ssh 如何在交换设备上创建

telnet 测试 说明telnet 成功 这测试ftp 成功

深入理解MySQL InnoDB中的B+索引机制

目录 一、InnoDB中的B 树索引介绍 二、聚簇索引 (一)使用记录主键值的大小进行排序 页内记录排序 页之间的排序 目录项页的排序 (二)叶子节点存储完整的用户记录 数据即索引 自动创建 (三)聚簇索引…

【每日刷题】Day129

【每日刷题】Day129 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode) 2. LCR 154. 复杂…

足球预测模型理论:足球数据分析——XGBoost算法实战

简介:本文将探讨如何使用XGBoost算法进行足球数据分析,特别是足球运动员身价估计。我们将通过实例和生动的语言,解释XGBoost算法的原理和实际应用,帮助读者理解复杂的技术概念,并提供可操作的建议和解决问题的方法。 足…

Eclipse离线安装Tomcat插件

Eclipse离线安装Tomcat插件 最近的自己在对低版本的代码的进行维护补丁,不得不采用Eclipse 来进行跑项目,真的是折磨 其中遇到一个问题就是打开Eclipse的2021版,安装Tomcat的插件,发现好家伙,就是死活在线安装失败 (喵的,真的是让我抓耳挠腮!!哈哈哈) 无奈,只好采用离线安装,特…

实时语音识别技术实现

实时语音识别 1.环境2.完整代码3.效果4.可能的问题 实时语音识别 1.环境 python版本:3.11.9 2.完整代码 import sqlite3 import timefrom funasr import AutoModel import sounddevice as sd import numpy as np# 模型参数设置 chunk_size [0, 10, 5] encoder_c…

60.【C语言】内存函数(memset,memcmp函数)

3.memset函数(常用) *简单使用 memset:memory set cplusplus的介绍 点我跳转 翻译: 函数 memset void * memset ( void * ptr, int value, size_t num ); 填充内存块 将ptr指向的内存块的前num个字节设置为指定值(解释为无符号char)。 (指针ptr类型为…