【MySQL】聚合函数和GROUP BY

news2024/11/25 10:42:25

文章目录

    • 1、聚合函数
    • 2、GROUP BY
    • 3、HAVING
    • 4、SELECT的执行过程

1、聚合函数

  • 聚合函数作用于一组数据,并对一组数据返回一个值。
  • 聚合函数类型:AVG()、SUM()、MAX()、MIN()、COUNT()。
  • 不能在 WHERE 子句中使用聚合函数。
SELECT AVG(salary), MAX(salary), MIN(salary),SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%';

SELECT COUNT(*)
FROM employees; 
# 107

-- COUNT(expr) 返回expr不为空的记录总数。
SELECT COUNT(commission_pct)
FROM employees; 
# 35

在这里插入图片描述

  • 可以对数值型数据使用AVG 和 SUM 函数。
  • 可以对任意数据类型的数据使用 MIN 和 MAX 函数。
  • COUNT(*)返回表中记录总数,适用于任意数据类型。
  • COUNT(expr) 返回expr不为空的记录总数。
  • 用count(*),count(1),count(列名)对于MyISAM引擎的表是没有区别的,引擎内部有一计数器在维护着行数。
  • 不能使用 count(列名)来替代 count() , count() 是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。
  • count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。

2、GROUP BY

  • 可以使用GROUP BY子句将表中的数据分成若干组
  • WHERE一定放在FROM后面
  • 包含在 GROUP BY 子句中的列不必包含在SELECT 列表中
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id;

SELECT AVG(salary)
FROM employees
GROUP BY department_id;

# 使用多个列分组
SELECT department_id dp_id, job_id, SUM(salary)
FROM employees
GROUP BY dp_id, job_id;

在这里插入图片描述

  • 使用WITH ROLLUP 关键字之后,在所有查询出的分组记录之后增加一条记录,计算查询出的所有记录的总和,即统计记录数量。
  • ROLLUP和ORDER BY是互相排斥的。当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序。
SELECT department_id, AVG(salary)
FROM employees
WHERE department_id > 60
GROUP BY department_id WITH ROLLUP;

在这里插入图片描述

3、HAVING

  • HAVING子句用于过滤分组
  • 行已经被分组。
  • 使用了聚合函数
  • 满足HAVING 子句中条件的分组将被显示。
  • HAVING 不能单独使用,必须要跟 GROUP BY 一起使用。
  • 可以在一个查询里面同时使用 WHERE 和 HAVING。
  • 包含分组统计函数的条件用 HAVING,普通条件用 WHERE。
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 1000;

WHERE和HAVING的对比

  • WHERE 先筛选数据再关联,执行效率高。不能使用分组中的计算函数进行筛选。
  • HAVING 可以使用分组中的计算函数在最后的结果集中进行筛选,执行效率较低。

区别1:

  • WHERE 在 GROUP BY 之前,可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件。
  • HAVING 必须要与 GROUP BY 配合使用,且在 GROUP BY 之后,可以把分组计算的函数和分组字段作为筛选条件,对分组的结果集进行筛选,这是 WHERE 无法完成的。

区别2:

  • 在关联查询中,WHERE 比 HAVING 更高效。当数据量特别大的时候,运行效率会有很大的差别。
  • WHERE 是先筛选后连接,用一个筛选后的较小数据集和关联表进行连接,这样占用的资源比较少,执行效率也比较高。
  • HAVING 是先连接后筛选。用未被筛选的数据集进行关联,然后对这个大的数据集进行筛选,这样占用的资源就比较多,执行效率也较低。

4、SELECT的执行过程

  • SELECT查询结构
#方式1:
SELECT ...,....,...
FROM ...,...,....
WHERE 多表的连接条件
AND 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...

#方式2:
SELECT ...,....,...
FROM ... JOIN ...
ON 多表的连接条件
JOIN ...
ON ...
WHERE 不包含组函数的过滤条件
AND/OR 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...
  • SELECT执行顺序
  • 关键字的顺序是不能颠倒的:
    SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT…
  • SELECT 语句的执行顺序:
    FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT
  • 在 SELECT 语句执行步骤的时,每个步骤都会产生一个虚拟表,然后将这个虚拟表传入下一个步骤中作为输入。
  • 需要注意的是,这些步骤隐含在 SQL 的执行过程中,对于我们来说是不可见的。
  • SELECT 是先执行 FROM 这一步的。

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

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

相关文章

从0到1一步一步玩转openEuler--14 openEuler DNF(YUM)配置管理

文章目录14.1 DNF配置文件14.1.1 配置main部分14.1.2 配置repository部分14.1.3 显示当前配置14.2 创建本地软件源仓库14.3 添加、启用和禁用软件源14.3.1 添加软件源14.3.2 禁用软件源14.3.3 启用软件源DNF是一款Linux软件包管理工具,用于管理RPM软件包。DNF可以查…

论文笔记: Monocular Depth Estimation: a Review of the 2022 State of the Art

中文标题:单目深度估计:回顾2022年最先进技术 本文对比了物种最近的基于深度学习的单目深度估计方法: GPLDepth(2022)[15]: Global-Local Path Networks for Monocular Depth Estimation with Vertical CutDepthAdabins(2021)[1]: Adabins:…

操作系统:文件系统的实现

一、文件系统结构 磁盘的逻辑单元为块,内存和磁盘之间的I/O传输以块为单位执行。 磁盘的特点 1可以原地重写,可以从磁盘上读一块儿,修改该块,并将它写回到原来的位置可以直接访问磁盘上的任意一块。因此,可以方便地…

浅析SCSI协议(2)命令模型

SCSI命令模型 SCSI协议对链路传输没有进行严格的限制,但约束了SCSI的命令模型。协议允许使用SAS、FC以及以太网等不同的链路实现,但对所有的SCSI传输层实现而言,都必须遵循统一的SCSI命令模型。SCSI命令模型约束了SCSI命令执行过程、命令请求…

《底层逻辑:看清这个世界的底牌》读后感

书名《底层逻辑:看清这个世界的底牌》作者刘润简介如果只教给你各行各业的“干货”(方法论),那只是“授人以鱼”,一旦环境出现任何变化,“干货”就不再适用。但如果教给你的是底层逻辑,那就是“…

初入测试如何编写测试用例?从3个方面带你写一个合格的测试用例

前言 作为一个测试新人,刚开始接触测试,对于怎么写测试用例很头疼,无法接触需求,只能根据站在用户的角度去做测试,但是这样情况会导致不能全方位的测试APP,这种情况就需要一份测试用例了,但是不…

亿级高并发电商项目-- 实战篇 --万达商城项目 七(品牌模块、商品类型模块等开发)

专栏:高并发---分布式 在管理商品时,除了商品名、价格、商品介绍等基本参数外。还需 要给商品添加品牌、商品类型、商品规格等参数。比如Iphone13的 品牌是苹果。商品类型属于手机通讯>手机>手机。规格有机身颜色: 星光色、版本:128G。品牌、商品…

暗网与深网:5 个主要区别

在互联网上,深网不会被网络爬虫索引,而暗网是故意隐藏的。 文章目录前言一、暗网与深网二、什么是暗网?什么是深网?暗网和深网之间的 5 个主要区别1. 范围和操作暗网深网2. 尺寸暗网:深网:3. 访问暗网深网4…

数据的分组聚合

1:分组 t.groupby #coding:utf-8 import pandas as pd import numpy as np file_path./starbucks_store_worldwide.csv dfpd.read_csv(file_path) #print(df.head(1)) #print(df.info()) groupeddf.groupby(byCountry) print(grouped) #DataFrameGroupBy #可以遍历…

1.2配置OSPF包文分析和验证

1.2.2实验2:配置OSPF包文分析和验证 [1] 实验目的通过抓包分析OSPF的包文实现OSPF区域认证的配置实验拓扑实验拓扑图如图1-3所示。 图1-3 配置OSPF包文分析和验证 实验步骤 IP地址的配置、运行OSPF的步骤与实验1相同,此处略。[2] 在R1的g0/0/0抓包

Redis 集群搭建及集群管理工具

目录一、简介二、架构图三、搭建集群3.1、下载3.2、编译安装3.3、配置文件修改3.4、创建集群四、集群管理工具redis-cli4.1、查看集群信息4.2、检查集群4.3、修复槽错误4.4、重分片4.5、负载均衡4.6、添加节点4.7、删除节点4.8、设置超时4.9、导入数据4.10、重建集群一、简介 本…

【JavaWeb】网络编程概念 + Socket套接字 + UDP/TCP编程

目录 网络编程基础概念 发送端与接受端 请求与响应 客户端与服务器 常见的客户端服务器模型 Socket套接字 回显(echo)程序 UDP版的回显程序 服务器代码 客户端代码 结果 TCP版的回显程序 服务器代码 客户端代码 结果 网络编程基础概念 网络编程,指网…

2.5|物联网应用系统设计|复习提纲|提问背诵

基础概念总结掌握Linux常用的基本命令功能、语法结构,用法等。具体命令参考实验指导书、相关PPT等资料内容。什么是操作系统(OS)?操作系统是用以控制和管理计算机系统资源,方便用户使用的程序和数据结构的集合。在所有…

零基础学习Python的一点建议

Python语言的火爆程度,真的是超过了任何一门计算机语言,当然火爆程度里面含有赶上了人工智能这个领域的风口,但是大部分的原因是Python易学,语法对小白非常友好,总结一句话,Python语言能做很多事情&#xf…

亿级高并发电商项目-- 实战篇 --万达商城项目 六(编写角色管理、用户权限(Spring Security认证授权)、管理员管理等模块)

专栏:高并发---前后端分布式 👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信…

使用nvm管理node

nvm介紹 node的版本管理器,可以方便地安装&切换不同版本的node 我们在工作中,可以会有老版本的node的项目需要维护,也可能有新版本的node的项目需要开发,如果只有一个node版本的话将会很麻烦,nvm可以解决我们的难点…

node 拉取github开源漏洞

我们可以通过github的open api 来拉取一些信息。这里主要是拉取 github 开源漏洞中的漏洞信息 Github Explorer github Explorer 是一个在线工具,登录之后,我们可以在左侧输入GraphQL 查询语句,之后就可以查询相关的信息。例如:…

B树和B+树,红黑树作为索引的区别

索引是一种数据结构,帮助我们在mysql表中更高效获取数据的数据结构 常用作为索引的数据结构:二叉树,红黑树,Hash表,B树,B树 下面的数据表中有两个字段,第一个字段是col1,第二个字段…

如何在Qt中设置背景图片,且不覆盖其它控件

正常情况,我们直接通过在样式表里设置背景图片会出现背景图片覆盖其它控件的情况,比如下面操作: 首先右击空白处,点击改变样式表。 然后选择background-image 然后点击铅笔图标 之后我们要先添加前缀,也就是我们…

使用 Three.js 后处理的粗略铅笔画效果

本文使用Three.js的后处理创建粗略的铅笔画效果。我们将完成创建自定义后处理渲染通道、在 WebGL中实现边缘检测、将法线缓冲区重新渲染到渲染目标以及使用生成和导入的纹理调整最终结果的步骤。翻译自Codrops,有改动。 Three.js 中的后处理 Three.js中的后处理是一…