MySQL零散拾遗(五)---- 对 GROUP BY 要点进行详细介绍

在GROUP BY的使用过程中,SELECT 中出现的非组函数的字段必须声明在 GROUP BY 中。

还记得 MySQL零散拾遗(四) 中,提到的 GROUP BY 的使用要点嘛?

SELECT 中出现的非组函数的字段必须声明在 GROUP BY 中。反而,在 GROUP BY 中声明的字段可以不出现在SEELCT中。

现在就用个案例对其进行解释 o.O

GROUP BY 作用的只有分组列和聚合函数列,其他列不管用,返回的其他列只有对应的第一行

首先,我们来看一个具体的例子:

假设有一个 employees 表,包含以下数据:

employee_idlast_namejob_idsalary
1SmithCLERK1000
2JohnsonCLERK1200
3WilliamsMANAGER3000
4JonesCLERK1100
5BrownCLERK800

现在我们执行以下查询:

SELECT job_id, last_name, MAX(salary)
FROM employees
GROUP BY job_id;

结果如下:

job_idlast_nameMAX(salary)
CLERKJones1200
MANAGERWilliams3000

你可以观察到:

  1. GROUP BY 的作用对象是 job_id 列,也就是说查询结果会根据 job_id 进行分组。
  2. 在每个分组内,我们使用了聚合函数 MAX(salary) 来获取该分组内工资最高的值。
  3. 但对于 last_name 列,它并不是分组列也不是聚合函数,因此 SELECT 中返回的 last_name 值是该分组中第一条记录的 last_name

也就是说,GROUP BY 作用的是分组列和聚合函数列,其他列只能取该分组中的第一条记录的值。

再来看另一个例子:

SELECT job_id, last_name, salary 
FROM employees
GROUP BY job_id, last_name;

结果如下:

job_idlast_namesalary
CLERKBrown800
CLERKJones1100
CLERKJohnson1200
CLERKSmith1000
MANAGERWilliams3000

这里我们在 GROUP BY 中同时指定了 job_idlast_name,因此查询结果中每一行对应一个独特的 job_idlast_name 组合,salary 也是该组合的实际值。

总之,GROUP BY 的作用是将查询结果按照指定的列进行分组,分组内使用聚合函数进行计算,而其他非分组列和非聚合函数列则返回该分组中的第一条记录的值。

额…想手动实现一下,但创建表太麻烦了,(⊙﹏⊙)
莫事儿莫事儿,我还找到了对应的 OJ 题,3,2,1,“上链接”
产品销售分析 III

这道题的要求:选出每个售出过的产品 第一年 销售的 产品 id年份数量价格

重点在于 第一年,这时候脑子里就出现一个想法(自行脑补那个表情包,哈哈哈哈)直接对product_id字段进行分组,然后使用 MIN(year) 不就行了嘛!

SELECT product_id, year first_year, quantity, price
FROM sales
GROUP BY product_id
HAVING year = MIN(year);

额,这种做法其实是错误的
对其进行改进改进就行了,使用子查询先把product_idyear进行筛选,再进行外层筛选

SELECT product_id, year first_year, quantity, price
FROM sales
WHERE (product_id, year) IN (SELECT product_id, MIN(year)FROM salesGROUP BY product_id
);

还可以使用开窗函数 rank

SELECT product_id, year first_year, quantity, price
FROM (SELECT *,RANK() OVER(PARTITION BY product_id ORDER BY year) as rankingFROM sales
) rank_table
WHERE ranking = 1

rank函数进行介绍一下

Rank 开窗函数是 SQL 中一种用于对查询结果集中的行进行 排名 的开窗函数。它可以根据指定的列或表达式对结果集中的行进行排序,并为每一行分配一个排名。在排名过程中,相同的值将被赋予相同的排名,而不同的值将被赋予不同的排名。

当存在并列(相同排序值)时,Rank 会跳过后续排名,并保留相同的排名。

Rank 开窗函数的常见用法是在查询结果中查找前几名(Top N)或排名最高的行。

Rank 开窗函数的语法如下:

RANK() OVER (PARTITION BY 列名1, 列名2, ... -- 可选,用于指定分组列ORDER BY 列名3 [ASC|DESC], 列名4 [ASC|DESC], ... -- 用于指定排序列及排序方式
) AS rank_column

其中,PARTITION BY 子句可选,用于指定分组列,将结果集按照指定列进行分组;ORDER BY 子句用于指定排序列及排序方式,决定了计算 Rank 时的排序规则。AS rank_column 用于指定生成的 Rank 排名列的别名。

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

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

相关文章

array.some() ==> 查找数组list中,是否有包含与当前currKey的值不一样的misId

需求: const list [ {misId: e, name: 小白}, {misId: e, name: 小白白}, {misId: r, name: 小王}, {misId: r, name: 小小王} ] let currKey r 查找数组list中,是否有包含与当前currKey的值不一样的misId 解决: 要查找数组lis…

【2】Spring Cloud 工程搭建

🎥 个人主页:Dikz12🔥个人专栏:Spring Cloud实战📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 1.声明项目依赖和项目构建插件 2.完善子项目订单服务 2.1完善启动…

开源发票识别InvoiceNet项目Windows部署踩坑记(1)

今天安装在github上的InvoiceNet开源项目,准备对它进行测试,安装过程出现了一些问题,做个记录,给遇到兄弟爬坑。 第一个问题,conda的问题, 这是另外一个包管理器,不仅仅可以管理python的虚拟…

layui+thymeleaf+jquery实现多图片,多视频的上传、预览、放大、编辑功能

layuithymeleafjquery实现多图片&#xff0c;多视频的上传、预览、放大、编辑功能 html: <!--多图片上传--> <div class"layui-row layui-col-space10"><div class"layui-form-item"><div class"layui-form-item layui-form-te…

mybatis xml 文件中引用Java类的静态方法

MyBatis-Plus 支持在 XML 映射文件中使用 ${} 来直接嵌入字符串&#xff0c;以及使用 #{} 来引用传入参数。但是&#xff0c;$ 的使用需要小心&#xff0c;因为它会直接将参数内容嵌入到 SQL 语句中&#xff0c;这可能会导致 SQL 注入问题。 在 MyBatis-Plus 中&#xff0c;如果…

Android 防止重复点击

1.第一种方式&#xff1a; private static final int MIN_DELAY_TIME 2000; // 两次点击间隔不能少于2000ms private static long lastClickTime System.currentTimeMillis(); public static boolean isFastClick() { boolean flag true; long currentClickTime …

苹果电脑怎么清理缓存和垃圾 mac如何关闭正在运行的程序 苹果电脑怎么清理后台

苹果电脑以其出色的性能和用户友好的界面而广受好评&#xff0c;但在使用过程中&#xff0c;后台程序的堆积可能会影响到系统的运行效率。太多应用和进程在后台默默运行&#xff0c;就像是无形的背包&#xff0c;让你的Mac背负了太多不必要的重量。不过&#xff0c;别担心&…

08、Tomcat 部署及优化

8.1 Tomcat概述 8.1.1 Tomcat介绍 自从 JSP 发布之后,推出了各式各样的 JSP 引擎。Apache Group 在完成 GNUJSP1.0的开发以后&#xff0c;开始考虑在 SUN 的 JSWDK 基础上开发一个可以直接提供 Web 服务的 JSP服务器&#xff0c;当然同时也支持 Servlet, 这样 Tomcat 就诞生…

使用LSTM完成时间序列预测

c 在本教程中&#xff0c;我们将介绍一个简单的示例&#xff0c;旨在帮助初学者入门时间序列预测和 PyTorch 的使用。通过这个示例&#xff0c;你可以学习如何使用 LSTMCell 单元来处理时间序列数据。 我们将使用两个 LSTMCell 单元来学习从不同相位开始的正弦波信号。模型在…

Perl 哈希

Perl 哈希 Perl 哈希是一种强大的数据结构&#xff0c;用于存储键值对集合。它是 Perl 语言的核心特性之一&#xff0c;广泛应用于各种编程任务中。本文将详细介绍 Perl 哈希的概念、用法和最佳实践。 什么是 Perl 哈希&#xff1f; Perl 哈希是一种关联数组&#xff0c;其中…

MYSQL 七、mysql 日志与备份

一、其他数据库日志 千万不要小看日志。很多看似奇怪的问题&#xff0c;答案往往就藏在日志里。很多情况下&#xff0c;只有通过查看日志才 能发现问题的原因&#xff0c;真正解决问题。所以&#xff0c;一定要学会查看日志&#xff0c;养成检查日志的习惯&#xff0c;对提升你…

C语言-预处理详解

1.预处理符号 C语言中设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号是在预处理期间处理的。 __FILE__//代表当前进行编译的源文件 __LINE__//文件当前行号 __DATE__//文件当前日期 __TIME__//文件当前时间 __STDC__//如果编译器遵循ANSIC&#xff0c;…

重复图片查找:巧用Python和OpenCV进行图像哈希与汉明距离检测以从海量图片中找出重复图片

重复图片查找&#xff1a;巧用Python和OpenCV进行图像哈希与汉明距离检测以从海量图片中找出重复图片 1. 导言2. 环境准备3. 图像哈希&#xff08;pHash&#xff09;原理4. 汉明距离原理5. 代码实现导入必要的库图像哈希计算函数汉明距离计算函数查找重复图片函数示例使用 在处…

【ELK+Kafka+filebeat分布式日志收集】kibana基本使用教程

基本功能 查询数据 在Discover中查看数据: 进入Discover视图。 选择之前创建的索引模式。 使用搜索框和过滤器来查询和过滤数据。 使用KQL(Kibana Query Language): KQL是一种简单的查询语法,用于过滤Elasticsearch中的数据。 支持Terms Query、Boolean Queries、Range …

分布式锁的实现:Redis和Zookeeper

在分布式系统中&#xff0c;确保数据的一致性和避免并发问题是非常重要的。分布式锁是解决这些问题的关键技术之一。本文将详细介绍如何使用Redis和Zookeeper实现分布式锁&#xff0c;并通过Java代码示例帮助读者理解其实现原理。 1. 分布式锁的基本概念 分布式锁是一种用于协…

乐鑫AWS IoT ExpressLink方案,简化物联网设备连接AWS IoT服务

在现代科技迅速发展的今天&#xff0c;物联网&#xff08;IoT&#xff09;已经成为连接物理世界与数字世界的重要桥梁&#xff0c;越来越多的设备开始接入网络&#xff0c;实现智能化控制。 在这个大背景下&#xff0c;乐鑫携手亚马逊&#xff0c;推出了AWS IoT ExpressLink方…

Linux:Linux发展史

大家好&#xff01;此篇文章并非技术博文&#xff0c;而是简单了解Linux的时代背景和发展史&#xff0c;只有知其所以然才能让我们更好地让走进Liunx的世界&#xff01; 一、计算机的发展历史背景 首先我们要知道&#xff0c;早期大多数科技的进步都是以国家的对抗为历史背景的…

Java语言程序设计基础篇_编程练习题**15.17 (几何问题:寻找边界矩形)

**15.17 (几何问題:寻找边界矩形) 请编写一个程序&#xff0c;让用户可以在一个二维面板上动态地增加和移除点&#xff0c;如图15-29a所示。当点加入和移除的时候&#xff0c;一个最小的边界矩形更新显示。假设每个点的半径是 10 像素 解题思路&#xff1a; 这道题可以从编程…

数学建模(4)——支持向量机算法

一、代码示例 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import clas…

1-如何挑选Android编译服务器

前几天&#xff0c;我在我的星球发了一条动态&#xff1a;入手洋垃圾、重操老本行。没错&#xff0c;利用业余时间&#xff0c;我又重新捣鼓捣鼓代码了。在接下来一段时间&#xff0c;我会分享我从服务器的搭建到完成Android产品开发的整个过程。这些东西之前都是折腾过的&…