首页 > 数据库 >MYSQL GROUP BY 对多个字段进行分组

MYSQL GROUP BY 对多个字段进行分组

时间:2023-10-12 22:55:27浏览次数:52  
标签:ITB001 GROUP PD001 Todd 分组 MYSQL Subject

在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组, 用来获取数据表中以分组字段为依据的统计数据。比如有一个学生选课表,表结构如下:

Table: Subject_Selection

Subject Semester Attendee

ITB001 1 John
ITB001 1 Bob
ITB001 1 Mickey
ITB001 2 Jenny
ITB001 2 James
MKB114 1 John
MKB114 1 Erica
我们想统计每门课程有多少个学生报名,应用如下SQL:

SELECT Subject, Count(*)
FROM Subject_Selection
GROUP BY Subject
得到如下结果:

Subject Count

ITB001 5
MKB114 2
因为表里记录了有5个学生选择ITB001,2个学生选择了MKB114。

产生这个结果的原因是:
GROUP BY X意思是将所有具有相同X字段值的记录放到一个分组里。
那么GROUP BY X, Y呢?
GROUP BY X, Y意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里。

我们下面再接着要求统计出每门学科每个学期有多少人选择,应用如下SQL:

SELECT Subject, Semester, Count(*)
FROM Subject_Selection
GROUP BY Subject, Semester
上面SQL的意思是,对Subject_Selection表中的数据进行分组,将具有相同Subject和Semester字段值的记录放到同一个分组里去, 然后对每个分组中的数据应用聚合函数(COUNT,SUM, AVG,etc)。

得到的结果是:

Subject Semester Count

ITB001 1 3
ITB001 2 2
MKB114 1 2
从表中的记录我们可以看出这个分组结果是正确的有3个学生在第一学期选择了ITB001, 2个学生在第二学期选择了ITB001,
还有两个学生在第一学期选择了MKB114, 没人在第二学期选择MKB114。

再比如有一个订单表,表中记录了所有支付过的订单

Table: Order

Product Buyer Spending

PD001 Todd 12.00
PD001 Todd 12.00
PD001 Todd 12.00
PD001 Lily 12.00
PD001 Lily 12.00
PD002 Todd 20.00
PD002 Todd 20.00
现在我们想统计每个用户在每种商品上总共花了多少钱,执行如下SQL

SELECT Product,Buyer, SUM(Spending)
FROM Order
GROUP BY Product, Buyer
获得的结果如下:

Product Buyer SUM

PD001 Todd 36.00
PD001 Lily 24.00
PD002 Todd 40.00
总结:

在MYSQL中使用GROUP BY对表中的数据进行分组时,
GROUP BY X意思是将所有具有相同X字段值的记录放到一个分组里,
GROUP BY X, Y意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里。

转自:https://segmentfault.com/a/1190000006821331

标签:ITB001,GROUP,PD001,Todd,分组,MYSQL,Subject
From: https://www.cnblogs.com/fifawas/p/17760817.html

相关文章

  • 深入MySQL索引,这篇千万不能错过
    大家好,我是【码老思】,索引是一个数据库绕不开的话题,今天和大家一起聊聊。1.索引索引是对数据库表中一列或多列的值进行排序的一种结构。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。索引只是提高效率的一个因素,如果你的MySQL有大数据量......
  • hive数据清洗,导入mysql
    --用于清洗的表createtabledata1(`ip`stringcomment'城市',`date1`stringcomment'日期',`day`stringcomment'天数',`traffic`doublecomment'流量',`type`stringcomment'类型:视频video或文章art......
  • sql注入(mysql的重要语句语法)
    查询当前数据库服务器所有数据库showdatabases;选中某个数据库use数据库名查询当前数据库所有的表showtables;查询某表所有数据select*fromt1;(whereid=2;)union合并查询2个特性:前面的查询语句和后面的查询语句结果互不干扰前面的查询语句的字段数量和后面......
  • mysql 物理备份xtrabackup
    1.优缺点优点:a.备份过程快速可靠b.支持增量备份c.备份过程不会打断正在执行的事务d.能够基于压缩等功能节约磁盘和空间e.自动实现备份验证f.还原速度快缺点:a.只能对innodb表进行增备,myisam表备份是全备b.对myisam表进行备份时要对全库加readlock,阻塞写操作,若备份在从库上进行会......
  • 【2023年10月12日】stf61-MySQL数据库
     stf61-MySQL数据库前言1)为什么学?● 常见的笔试题● 有利于更好的开展测试工作2)学什么?理论:基本的术语和概念实操:数据库操作、表操作、数据操作、其他常见数据库功能3)怎么学?多在实训环境里练习,在练习中掌握 理论 数据库系统: 表:8条记录/行,6个字段/列 ......
  • pt-slave-repair - 自动修复MySQL主从同步数据
    pt-slave-repair介绍MySQL主从复制作为一种常见的数据同步方式,有时候会出现同步错误导致同步中断的情况。手动修复这些同步错误通常需要耗费时间和精力,并且对于不熟悉MySQL复制的人来说比较困难。pt-slave-repair是对原有pt-slave-restart工具的补充,它提供自动修复MySQL主从同步......
  • MySQL命令行监控工具 - mysqlstat
    mysqlstat是一个命令行工具,用于实时监控和分析MySQL服务器的性能指标和相关信息。它可以帮助DBA(数据库管理员)和开发人员定位和解决数据库性能问题。以下是mysqlstat工具的主要功能:实时监控:mysqlstat可以实时监控MySQL服务器的QPS(每秒查询数)、TPS(每秒事务数)以及网络......
  • nacos开机自启无法连接上本机的Mysql
    nacos和mysql处于同一台服务器的情况下才会遇到我说的这个问题。一、遇到的问题如下:nacos在设置了开机自启动脚本/usr/lib/systemd/system/nacos.service,并且设置了systemctlenablenacos。mysql给nacos使用的用户开启了%和localhost均可连接的权限。这种情况下,nacos开机自......
  • 记一次MySQL数据库恢复
    1、恢复步骤概要备份frm、ibd文件如果mysql版本发生变化,安装回原本的mysql版本创建和原本库名一致新库,字符集都要保持一样通过frm获取到原先的表结构,通过的得到的表结构创建一个和原先结构一样的空表。使用“ALTERTABLEDISCARDTABLESPACE;”命令卸载掉表空间将原先的ibd拷贝到my......
  • 面试官:MySQL数据查询太多会OOM吗
    我的主机内存只有100G,现在要全表扫描一个200G大表,会不会把DB主机的内存用光?逻辑备份时,可不就是做整库扫描吗?若这样就会把内存吃光,逻辑备份不是早就挂了?所以大表全表扫描,看起来应该没问题。这是为啥呢?1、全表扫描对server层的影响假设,我们现在要对一个200G的InnoDB表db1.t,执行一个......