mysql学习-- 聚合函数,group by理解与使用

news2024/9/22 21:18:28

文章目录

  • 聚合函数
    • 定义
    • 常用的聚合函数
    • group by的使用
      • 使用单个列进行分组
      • 根据多个列进行分组
      • having 的使用
        • 作用
        • 要求
      • sql 语法
        • sql92语法:
        • sql99语法:
        • sql语句的执行过程(进理解为主):

聚合函数

定义

作用一组数据,并对数据返回一个值
例如,查询公司每个部门的最高工资
解决办法,
(1)select 函数 from 表 where 部门
这只能获取一条数据(或一个部门的最高工资)
(2)分析上述问题,实际上是将公司所有员工这个整体按部门分组 ,然后对每一组求最高工资,每一组就是一条数据然后打印出来
聚合函数就是为了解决上述问题(对数据分组并对每组数据操作)
sql 语句:

select 部门id,max(薪资字段) from 表名称 group by 部门

解释,

  • 获取最高工资是通过max()函数,对所有工资取最大值,
  • group by xx ,就是根据xx分组,
  • 合起来就是对每一组进行获取最大值,然后会返回每一组的数据。
  • 总的来说,通过group by进行分组,通过max()等聚合函数,对每组数据进行操作,来解决分组操作问题

常用的聚合函数

  1. avg() ,一组数据的平均数据 sum() ,一组数据的总和
    以上连个只适用于数值类型的字段

  2. max(),一组数据的最大值min()一组数据的最小值
    注意,max(name), 字符串的最大值是有意义的,字符串可以比较大小,日期也是

  3. count() ,计算指定字段在查询结果中出现的个数(不包含null)
    计算表中有多少记录? count(*) ,count(1) 可以, count(具体字段) 由于不包含null不准确

  • count(1),count(),count(字段) 的效率问题?
    如果使用的是MyISAM存储引擎,则三者效率相同, O(1)
    如果使用的是InnoDB存储引擎,则三者效率 count(
    )=count >count(字段)

group by的使用

使用单个列进行分组

group by 字段
例如,根据部门ID分组
```
select prod_id , salary from Employee group by prod_id
```

根据多个列进行分组

group by 字段1,字段2
例如,根据部门和工种进行分组

select 部门,工种 ,salary from Employee group by 部门,工种
  • 注意,
    • group by 部门,工种 与group by 工种 , 部门 结果相同 ,相当于54 与 45的区别、
      例如,5个部门,4个工种,
      group by 部门,工种 所有记录为 54(5个部门,每个部门4个工种),
      group by 工种,部门 所有记录为4
      5

    • 使用group by 是为了对一组数据进行操作,也就是说select 出现的字段,必须是一组数据共有的,例如根据部门分组 展示的字段 可以是部门或一组数据操作的结果。但不能是一组数据各不相同的字段
      例如员工名字,一组数据只展示1条数据,1组有n个员工,每个员工名字都不相同没办法展示。会报错。

    • group by 的位置
      select * from table where group by order by limit

    • with rollup 的使用
      解释,group by pod_id with rollup 在group by 字段后 加 with rollup,
      会每组计算完之后,将整体(整张表看作是一组)进行操作并将数据展示在最后一行
      注意,当使用with rollup 时不能使用 order by ,这两个会冲突,
      主要是将整体看作一组和按字段划分的组不能在一起排序,不能将公司成绩和个人成绩排序,公司成绩排第一,员工1排第二 ,员工2 排第三 这不符合常理。

having 的使用

作用

  • 过滤数据,例如,不使用 having 我的得到的是根据字段划分后全部组的数据,使用having 后,我会得到 部分组的数据,有一部分数据被过滤了,体现在表记录中就是,没有使用having得到90条数据,使用后得到10条数据,每一条是对应的每一组的数据

要求

  • 聚合函数的条件判断必须要使用,having,
  • 注意 有时where 和 having 结果相同 ,但是where 效率更高

sql 语法

sql92语法:

  select ....,....,.... from .... ,....,.... where 多表连接条件and 不包含聚合函数的连接条件  
  group by ....,....,....
  having 包含聚合函数的连接条件
  order by ..... (ASC/DESC)
  limit .......

sql99语法:

select ....,.....,... from .....(left/right/full/inner) join 
...... on 多表连接条件
where 不包含聚合函数的过滤条件
group by ....,....,....
having 包含聚合函数的过滤条件
order by ...,...,... (ASC/DESC)
limit .....

sql语句的执行过程(进理解为主):

from .....,.....,...
 -> on ......   
 -> left/join/full /inner  
  -> where
   -> group by 
   ->  having 
   ->  select 
   -> distinct 
   -> order by 
   -.>limit
  • 知道上述执行过程可以知道一下:
    (1)前项引用,例如,在select 定义别名 可以在order by 中使用不能在where中使用
    注意,不要被子查询混淆,例如select 别名,(子查询,整个可以使用别名,定义别名后必须使用别名)
    (2)where 与 having的执行效率问题
    主要是,where 会将数据过滤掉,不用进行分组,和聚合函数的操作
    having是分组完成之后,在过滤

在这里插入图片描述

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

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

相关文章

ArcGIS Pro为CAD设置投影

将CAD加载到GIS中,经常出现与GIS数据不能重合的问题。 现在的国空规划的数据基本都是CGCS2000,不重叠的原因不太可能是因为地理坐标系不统一,那极有可能就是ArcGIS的动态投影与CAD的带号没有统一。 如下图,左边为ArcGIS动态投影…

宠物之家网站大学生网页制作教程 学生HTML静态宠物网页设计作业成品 DIV布局简单动物网页制作代码

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

宝塔无法安装fileinfo扩展解决办法(小白篇)

宝塔无法安装fileinfo扩展解决办法(小白篇) 宝塔无法php安装fileinfo扩展的方法:手动安装 重装系统登录宝塔先不要安装其他软件,先设置swap是Linux下的虚拟内存,设置内存后先安装PHP版本,安装好PHP以后&…

Python实现数据结构与算法(三)链表

链表 为什么需要链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。 链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。 链表的定义 链表&#xf…

html内联框架iframe

<!--iframe内联框架src&#xff1a;地址w-h&#xff1a;宽度高度 --> <iframe src"https://www.4399.com" frameborder"0" width"800px" height"800px"></iframe> 使用name属性&#xff1a; <!--回顾&#xff1…

Allegro如何创建差分对操作指导

Allegro如何创建差分对操作指导 Allegro可以在规则管理器里面进行差分对的创建,让两个网络以差分的形式布线,具体操作如下 打开规则管理器 选择Physical-net-All layers 选择两个需要创建差分对的网络,选择Create-Differential Pair 输入差分对的名字 选择Create 差分…

【MATLAB教程案例58】使用matlab实现yolov2网络目标检测功能与仿真分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 1.软件版本 2.yolo网络理论概述

Python画3D足球2

文章目录前情提要补点球形膨胀前情提要 足球是正五边形和正六边形拼接而成&#xff0c;由此形成的骨架结构&#xff0c;可通过切割正二十面体获得&#xff0c;所以画足球的第一步是画正二十面体&#xff1a;Python绘制正二十面体 在学会绘制正二十面体之后&#xff0c;就可以…

【JavaWeb开发-Servlet】老人言随机语录

需求&#xff1a;点击网页按钮随机显示一句话&#xff1a; 1、内容涵盖&#xff1a; 老人言、励志语录、名言名言、一句情话 2、设计要求&#xff1a; 以老人言为例&#xff1a;①在数据库创建一张表&#xff0c;存放老人言经典语录。字段包括&#xff1a;id、sentence。id为in…

腾讯云特惠专区——永久有效

腾讯云—腾讯倾力打造的云计算品牌,以卓越科技能力助力各行各业数字化转型,为全球客户提供领先的云计算、大数据、人工智能服务,以及定制化行业解决方案和提供可靠企业上云服务。 购买腾讯云的优势是新用户特别便宜;国内访问速度快;个人认证可秒过;缺点是:网站内容或者…

论文投稿指南——中文核心期刊推荐(机械、仪表工业)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384;&#x1f388; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff…

java计算机毕业设计ssm医院预约挂号系统b9971(附源码、数据库)

java计算机毕业设计ssm医院预约挂号系统b9971&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

C# 运算符与表达式

一 运算符 ① 算术运算符&#xff1a;、-、、/、%、、–; ② 关系运算符&#xff1a;>,<,>,<,,!; ③ 逻辑运算符&#xff1a;!,&,|,^,&&,||; ④ 位运算符&#xff1a;&,|,^,~,>>,<<; ⑤ 赋值运算符&#xff1a; 扩展赋值运算符&#…

ESP32 ESP-IDF LVGL8.3.3移植

陈拓 2022/11/27-2022/12/10 1. 概述 在《ESP32 ESP-IDF TFT-LCD(ST7735 128x160) LVGL演示》 ESP32 ESP-IDF TFT-LCD(ST7735 128x160) LVGL演示_晨之清风的博客-CSDN博客_esp32 tftlcd在ESP32开发框架ESP-IDF中用LVGL库驱动TFT-LCD(ST7735 128x160) 显示屏演示GUIhttps://bl…

游戏开发46课 性能优化5

3. CPU优化 性能优化最主要的一部分工作是CPU&#xff0c;CPU性能优化好了&#xff0c;离目标就成功了一半。 3.1 缓存计算结果 缓存计算是空间换时间的经典应用&#xff0c;它适用于那些耗费大量CPU计算而计算结果无需每帧变化的逻辑。实现伪代码&#xff1a; std::map<…

【Redis场景1】用户登录注册

细节回顾&#xff1a; 关于cookie和session不熟悉的朋友&#xff1b; 建议阅读该博客&#xff1a;https://www.cnblogs.com/ityouknow/p/10856177.html 执行流程&#xff1a; 在单体模式下&#xff0c;一般采用这种模式来存储&#xff0c;传递、认证用户登录、注册等信息&…

阿里巴巴最新推出王者笔记:“Spring MVC 源码与实践”

前言&#xff1a; Spring MVC 是 Spring 框架中用于 Web 应用快速开发的一个模块。Spring MVC 的 MVC 是 Model-View-Contoller 的缩写。它是一个广泛应用于图形化用户交互开发中的设计模式&#xff0c;不仅常见于 Web 开发&#xff0c;也广泛应用于如 Swing 和 JavaFX 等桌面…

Java知识要点

第1章 Java概述 重要特性&#xff1a; Write Once Run Anyway 简单性&#xff1a;相比C移除指针、运算符重载、多重继承等&#xff0c;垃圾自动回收。 平台无关性&#xff1a;Java引进虚拟机&#xff08;JVM&#xff0c;Java Virtual Machine&#xff09;概念。 安全性&am…

论文推荐:Rethinking Attention with Performers

重新思考的注意力机制&#xff0c;Performers是由谷歌&#xff0c;剑桥大学&#xff0c;DeepMind&#xff0c;和艾伦图灵研究所发布在2021 ICLR的论文已经超过500次引用 传统的Transformer的使用softmax 注意力&#xff0c;具有二次空间和时间复杂度。Performers是Transformer…

常用射频器件性能指标

IFM&#xff08;Instantaneous FrequencyMeasurement&#xff09;&#xff1a;瞬时测频接收机&#xff1b; SOC&#xff08;System on Chip&#xff09;&#xff1a;片上系统&#xff0c;可独立实现接收机功能&#xff1b; AIU&#xff1a;前端 一、放大器关键参数 1.1 -1dB压…