MySQL-----排序 GROUP BY

在我们对数据进行分析的时候,通常会根据一个或多个列对结果集进行分组,从而得到我们想要的结果。例如:统计考某一门课程的学生信息等。
而MySQL的GROUP BY 语句根据一个或多个列对结果集进行分组。同时,我们也可以使用 COUNT, SUM, AVG,等函数对分组得到的结果进行进一步的分析。

语法

SELECT column1, aggregate_function(column2) FROM table_name as name
WHERE condition GROUP BY column1,column2;
  • column1,column2:指定分组的列;
  • aggregate_function(column2):对分组后的每个组执行的聚合函数,例如COUNT/SUM/AVG等;
  • table_name:要查询的表名;
  • as name: 重命名,可选的;
  • condition:筛选结果的条件,这个是可选的;
  • 可以使用多个列进行分组,只需在 GROUP BY 子句中用逗号分隔列名即可。

举个栗子~

例如:我们对user表中的年龄进行分组,并统计每个年龄的人数:

在这里插入图片描述

注意:在sql语句中,我们也可以使用distinct来对数据进行去重,但是只会删除掉重复的数据,不会进行统计。所以,在需要统计具体数据的时候,我们依然要使用GROUP BY语句。

在举一些实例:

select age,count(age) as number from user group by age;
select age,count(age) as number from user group by age having age>20;//分组剔除数据,要使用having
select age,count(age) as number from user where age>20  group by age;//分组前剔除
select age,sex,count(*) from user group by age,sex;//多字段
select age,sex,count(*) from user group by age,sex order by age//与排序结合;

有以下几点需要注意:

  • 在分组结束以后进行剔除数据,我们需要使用having;
  • 分组前剔除数据我们使用where;
  • 两者的结果虽然是一样的,但是还是推荐使用where,他可以使用索引字段,加强搜索的效率;
  • 可以对分字段进行分组,group by 对后面所有的字段均起作用,即去重是查询的所有字段完全重复的数据,而不是只对 group by 后面连接的单个字段重复的数据。
    在这里插入图片描述

性能

在这里插入图片描述

可以看出在利用索引的值进行分组的时候,效率是高很多的。

补充一点 distinct 与 group by 的联系与区别

联系:

  • 两者都是MySQL中常用去重复数据的方法。
  • 两者对后面所有的字段均起作用,即去重是查询的所有字段完全重复的数据,而不是只对后面连接的单个字段重复的数据。

区别

  1. distinct需要将col列中的全部内容都存储在一个内存中,可以理解为一个hash结构,key为col的值,最后计算hash结构中有多少个key即可得到结果。需要将所有不同的值都存起来,内存消耗可能较大。而group by的方式是先将col排序。而数据库中的group一般使用sort的方法,即数据库会先对col进行排序。而排序的基本理论是,时间复杂为nlogn,然后计数。优点是空间复杂度小,缺点是要进行一次排序,执行时间会较长。
  2. distinct 只能放在查询字段的最前面,不能放在查询字段的中间或者后面。而group by一般与聚类函数使用(如count()/sum()等),也可单独使用。
  3. 要查询多个字段,但只针对一个字段去重,使用 distinct 去重的话是无法实现的。
  4. 查询的字段与 group by 后面分组的字段没有限制。

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

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

相关文章

Kubernetes 集群架构

etcd 集群状态存储:etcd 存储所有 Kubernetes 对象的状态,例如部署、pod、服务、配置映射和机密。配置管理:集群配置的更改存储在 etcd 中,允许 Kubernetes 管理和维护集群的所需状态。 注意:etcd 可能位于 kube-syst…

GBDT算法超参数评估

GBDT(Gradient Boosting Decision Tree)算法是一种强大的机器学习技术,广泛应用于分类、回归等任务。然而,为了充分发挥其性能,超参数的合理设置至关重要。超参数,如学习率、树的最大深度、子样本比例等&am…

尝试使用blazor(二)Blazor WebAssembly(WASM)与Server之间有什么区别?

要使用Blazor,你得先选择一种模式,因为它有两种模式。Blazor网络框架允许将Razor组件以不同的方式托管。它们可以在ASP.NET Core(Blazor Server)中在服务器端运行,也可以在基于WebAssembly的.NET运行时在浏览器中在客户…

便捷生活,从便民平台开始

想要生活更轻松、更便捷吗?那就来试试我们的便民平台吧!生活中的琐事总是让人头疼不已,但有了我们的便民平台,一切问题都迎刃而解! 咸阳便民平台的张总说:无论您是需要家政服务、维修安装,还是寻…

支持微信支付宝账单,极空间Docker部署一个开箱即用的私人账本『cashbook』

支持微信支付宝账单,Docker部署一个开箱即用的私人账本『cashbook』 哈喽小伙伴好,我是Stark-C~ 不知道屏幕前的各位富哥富姐们有没有请一个专业的私人财务助理管理自己的巨额资产,我不是给大家炫耀,我在月薪300的时候就已经有了…

ICC2:如何获取get_xx -filter后可用的属性有哪些?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 report_attribute -app -class cell $instname 这种直接告诉你指定cell有哪些属性,以及对应的值是什么 或者直接用list_attribute也可以 list_attribute -help可以…

STM32自己从零开始实操05:接口电路原理图

一、TTL 转 USB 驱动电路设计 1.1指路 延续使用芯片 CH340E 。 实物图 原理图与封装图 1.2数据手册重要信息提炼 1.2.1概述 CH340 是一个 USB 总线的转接芯片,实现 USB 与串口之间的相互转化。 1.2.2特点 支持常用的 MODEM 联络信号 RTS(请求发送&…

不吃饭也要搞懂的 git 命令

昨天睿哥布置了一个任务给我,让我学习一下 Git 的一些命令。 我问睿哥,到底我们在实际开发中用哪些命令会比较多,睿哥是这样回答我的: 而且他推荐我用 IDEA 自带的那个 Git 面板来执行 git 命令,他说直接敲命令太麻烦…

WPF学习(2)--类与类的继承2-在窗口的实现

一、代码分析 1.Animal.cs 1.1 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace AnimalNamespace {public class Animal{public string Name { get; set; }public int Age { get; set…

【乐吾乐2D可视化组态编辑器】条件变化,触发告警动画

条件触发告警动画 乐吾乐2D可视化组态编辑器地址:https://2d.le5le.com/ 如图所示,左侧文本图元数值一直在变化,当数值大于等于50的时候,右侧矩形图元执行告警动画,当数值小于50的时候,右侧图元恢复正常。…

Blender雕刻建模_UV展开

UV展开的标准:展平,不重叠,均匀展开 ZenUV插件 切到边模式 -Mark,标记缝合边 -Unmark,取消标记 -Unmark All,全部取消标记 -Mirror Seams,镜像缝合边 -Zen Unwrap,全部展开 纹…

Python私教张大鹏 Vue3整合AntDesignVue之Checkbox 多选框

何时使用 在一组可选项中进行多项选择时; 单独使用可以表示两种状态之间的切换,和 switch 类似。区别在于切换 switch 会直接触发状态改变,而 checkbox 一般用于状态标记,需要和提交操作配合。 案例:多选框组件 核心…

Django中使用下拉列表过滤HTML表格数据

在Django中,你可以使用下拉列表(即选择框)来过滤HTML表格中的数据。这通常涉及两个主要步骤:创建过滤表单和处理过滤逻辑。 创建过滤表单 首先,你需要创建一个表单,用于接收用户选择的过滤条件。这个表单可…

Laravel 6 - 第十九章 模型文件

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

基于JSP的超市管理系统

你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSP MyBatis 工具:IDEA/Eclipse、Navicat、Maven 系统展示 员工管理界面图 管…

香港户口需要什么条件?有学历要求吗?最新香港落户途径详解!

香港户口需要什么条件?有学历要求吗?最新香港落户途径详解! 由于香港放开“落户”窗口,想去香港发展或者想拿香港身份的朋友都想抓住这个机会赶紧申请。 只是,香港户口办理是有条件的,而且有学历要求&…

方法分享 |公网IP怎么指定非433端口实现https访问

公网IP可以通过指定非443端口实现HTTPS访问。在网络配置中,虽然HTTPS协议默认使用443端口,但没有规定不能在其他端口上实施HTTPS服务。使用非标准端口进行HTTPS通信需要正确配置服务器和SSL证书,并确保客户端能够连接到指定的端口。下面说明如…

tracetcp下载 安装 使用 网络工具 windows trace工具 tcp协议

省流 Tracetcp是一个类似于Tracert的工具,使用如下: 1. 安装winpcap , 下载链接:WinPcap Download 2.下载tracetcp软件,下载链接: https://github.com/0xcafed00d/tracetcp/releases 命令:…

工业交换机的供电功率配置

在工业领域中,交换机作为网络设备中的重要组成部分,其供电功率配置必不可少。工业交换机的供电功率配置不仅关系到设备的稳定运行,还直接影响到整个工业生产系统的效率和安全性。因此,在选择工业交换机时,必须对供电功…

WPF视频学习-简单应用篇图书馆程序(一)

1.登录界面和主界面跳转 先把登录界面分为三行《Grid》 先添加两行&#xff1a; <Grid><!--//分三行&#xff0c;行排列--><Grid.RowDefinitions><RowDefinition Height"auto"/><RowDefinition Height"auto"/><RowDef…