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 后面分组的字段没有限制。

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

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

相关文章

NHANES数据库及应用

NHANES数据库使用 NHANES - National Health and Nutrition Examination Survey Homepage (cdc.gov) 保姆级NHANES数据库使用教程 - 哔哩哔哩 (bilibili.com) 该数据库所涉及的参与者的死亡状况 :Data Access - National Death Index (cdc.gov) TyG对CVD的影响研…

【培训】企业档案管理专题(私货)

导读:通过该专题培训,可以系统了解企业档案管理是什么、为什么、怎么做。尤其是对档案的价值认知,如何构建与新质生产力发展相适应的企业档案工作体系将有力支撑企业新质生产力的发展,为企业高质量发展贡献档案力量,提…

运维系列.在Docker中使用Grafana

运维专题 在Docker中使用Grafana - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_2855026…

大厂面试必备:如何轻松实现分布式Session管理?

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!​​​​​​​ 大家好,我是小米,一个29岁的技术爱好者,喜欢分享各种技术干货。今天我们来聊一聊阿里巴巴面试中的一个经典问题:如何实现分布式Sess…

鸿蒙轻内核A核源码分析系列五 虚实映射(2)虚实映射初始化

2、 虚拟映射初始化 在文件kernel/base/vm/los_vm_boot.c中的系统内存初始化函数OsSysMemInit()会调用虚实映射初始化函数OsInitMappingStartUp()。该函数代码定义在文件arch/arm/arm/src/los_arch_mmu.c,代码如下。⑴处函数使TLB失效,清理虚实映射缓存…

深度学习(四)——torchvision中数据集的使用

1. 参数详解 torchvision中每个数据集的参数都是大同小异的,这里只介绍CIFAR10数据集 该数据集的数据格式为PIL格式 class torchvision.datasets.CIFAR10(root:str,train:boolTrue,transform:Optional[Callable]None,target_transform:Optional[Callable]None,do…

《庆余年》角色穿越高考:谁将笑傲现代考场?

一、引言 《庆余年》是一部以古代中国为背景的权谋小说,其角色们各具特色,聪明才智、武艺高强、忠诚耿直等特质使得他们在古代世界中游刃有余。然而,如果我们将这些角色置于现代高考的背景之下,他们将如何面对这一挑战&#xff1…

Java版电子招标采购系统源码:实现企业采购战略与流程的数字化革新

随着企业的发展,内部采购管理面临着日益增长的挑战。为了提升采购效率,确保采购过程的透明性和公正性,企业需要一个高效、规范的电子招标采购系统。鸿鹄电子招投标系统正是为此而设计,它采用Java技术,结合先进的微服务…

javaWeb项目-ssm+vue网上租车系统功能介绍

本项目源码:java-基于ssmvue的网上租车系统源码说明文档资料资源-CSDN文库 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、…

Liinux:进程程序替换

替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用e…

服务器时区与数据库时区不一致导致时间bug记录

1、背景 一个活动,需要按照自然月刷新,每月一期,以活动开始当月作为第一期,每期可配置不同数据。问题出现在:活动开始时间为本月,但是查询用户数据发现当前为第二期,反复查看代码,确…

Python API自动化:提升开发效率的利器

Python API自动化:提升开发效率的利器 随着互联网的发展,API(应用程序接口)已经成为现代应用程序开发的核心部分。API允许不同的软件系统之间进行通信,使得开发者可以轻松地集成各种服务和功能。在日常开发中&#xf…

Pikachu上的CSRF以及NSSCTF上的[NISACTF 2022]bingdundun~、 [SWPUCTF 2022 新生赛]xff

目录 一、CSRF CSRF(get) login CSRF(post) CSRF Token 二、CSRF的相关知识点 (1)什么是CSRF? (2)工作原理 (3)CSRF漏洞形成的条件 1、用户要在登录状态(即浏览器保存了该…

深入了解 Dart 语言:从基础到进阶

深入了解 Dart 语言:从基础到进阶 Dart 是由 Google 开发的一种现代化编程语言,特别为构建客户端应用程序而设计,尤其是在 Flutter 框架中得到了广泛应用。本文将带你了解 Dart 的基本概念、其在 Flutter 中的应用,以及如何开始使…

别再忽视数组排序的重要性了

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

线稳源极跟随 线性电源前端降压

功率MOSFET线性电源涉及跟随.ms14 根本原理是Vgs对Id的控制,Vgs越大,Id越大,反之亦然。 观察转移特性曲线,结合接线图可知,电路稳定后,如果负载电阻增大,则Vsgnd增大,由于Vggnd有稳…

ONNX2NCNN工具

最近部署很多onnx转ncnn的操作,发现还是需要有页面操作会比较好,而且需要查询onnx的图,所以写了一个工具来搭配使用 建议搭配Netron 来使用 打开模型 选择打开-》选择onnx模型 显示基础信息 查询onnx模型图 展示信息 点击“展示信息”&…

力扣2594.修车的最少时间

力扣2594.修车的最少时间 二分答案 class Solution {public:long long repairCars(vector<int>& ranks, int cars) {ranges::sort(ranks);auto check [&](long long x) -> bool{long long res 0;for(auto v : ranks){long long k sqrt(x/v);res k;if(r…

vb.net小demo(计算器、文件处理等/C#也可看)

Demo1&#xff1a;使用窗体控件实现一个简易版计算器 Public Class Form1Private Sub Button_1_Click(sender As Object, e As EventArgs) Handles Button_1.ClickCalSubBox.Text Button_1.TextEnd SubPrivate Sub Button_2_Click(sender As Object, e As EventArgs) Handles …

B端系统的颜值问题:成也框架,败也框架!

B端UI框架和前端框架的出现&#xff0c;让系统的搭建就像堆积木一样&#xff0c;十分的容易了。这也一下子把程序员的设计和审美水平拔高到了UI框架能够达到的高度。伴随而来的则是系统的堆砌、同质化、糟糕的体验&#xff0c;以及各种违和的组件被生搬硬套的绑定在一块&#x…