当前位置: 首页 > 编程笔记 >

MYSQL GROUP BY用法详解

朱自明
2023-03-14
本文向大家介绍MYSQL GROUP BY用法详解,包括了MYSQL GROUP BY用法详解的使用技巧和注意事项,需要的朋友参考一下

背景介绍

最近在设计数据库的时候因为开始考虑不周,所以产生了大量的重复数据。现在需要把这些重复的数据删除掉,使用到的语句就是Group By来完成。为了进一步了解这条语句的作用,我打算先从简单入手。

建一个测试表

create table test_group(id int auto_increment primary key, name varchar(32), class varchar(32), score int);

查看表结构

desc test_group

插入数据

测试开始

我想知道当前每一个班级里面最高分数的同学是谁。

select name, class , max(score) from test_group group by class;

好现在可以插入几条重复的数据。

insert into test_group(name, class, score)values('repeat','B',89);


现在要过滤掉重复的数据,保留最新的那条记录。一般我们假设最新的记录是最后插入的那条,所以它的ID应该是最大的那条。

select name, class, max(id) from test_group group by name;

可以发现,我们关注那个项的重复性就把它放到gourp by后面。这样我们就可以过滤掉那些与这个项重复的记录啦。现在我们得到了我们需要的数据,我们下一步就是把那些重复的数据删除。为了区分我们过滤出来的数据记录与原有的记录,我们可以给id取一个别名。

select name, class, max(id) as max_id from test_group group by name;

下一步就是把这些关心的数据保留下来,我先把这些数据的id提取出来。因为这个是唯一确定一条记录的。

select max_id from (select name, class, max(id) as max_id from test_group group by name)b;

下面就是删除操作了。思路就是删除那些数据ID不在我们查询结果里面的记录。为了方便操作后对数据的对比,我先进行一次全部查询。

select * from test_group;

执行删除操作。

delete from test_group where id not in (select max_id from (select name, class, max(id) as max_id from test_group group by name)b);

最后查看结果。

总结

MySQL操作还是很灵活的,之前一直喜欢用ORM现在感觉直接使用MYSQL省去了很多事。如果你有更好更高效的方式就请你分享分享吧~~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍numpy.where() 用法详解,包括了numpy.where() 用法详解的使用技巧和注意事项,需要的朋友参考一下 numpy.where (condition[, x, y]) numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y。 如果是一维数组,相当于[xv if c el

  • HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

  • 本文向大家介绍android popupwindow用法详解,包括了android popupwindow用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了android popupwindow的用法,供大家参考,具体内容如下 一、基本用法 一般做法,新建类继承popupwindow。例 研究下popupwindow源码,以showAsDropDown来讲 第11行创建Wind

  • 本文向大家介绍详解ORACLE SEQUENCE用法,包括了详解ORACLE SEQUENCE用法的使用技巧和注意事项,需要的朋友参考一下 在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。 1、Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。 创建语句如下: 2、得到Sequen

  • 本文向大家介绍java Beanutils.copyProperties( )用法详解,包括了java Beanutils.copyProperties( )用法详解的使用技巧和注意事项,需要的朋友参考一下 这是一篇开发自辩甩锅稿~~~~ 昨天测试小姐姐将我的一个bug单重开了,emmmm....内心OS:就调整下对象某个属性类型这么简单的操作,我怎么可能会出错呢,一定不是我的锅!!but再怎么抗

  • 本文向大家介绍require.js的用法详解,包括了require.js的用法详解的使用技巧和注意事项,需要的朋友参考一下 一、为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载。下面的网页代码,相信很多人都见过。 这段代码依次加载多个js文件。 这样的写法有很大的缺

  • 本文向大家介绍Python argv用法详解,包括了Python argv用法详解的使用技巧和注意事项,需要的朋友参考一下 想用python处理一下文件,发现有argv这个用法,搜来学习一下。 如果想对python脚步传参数,那么就需要命令行参数的支持了,这样可以省的每次去改脚步了。 用法是:python xx.py xxx 举例如下: 这里argv接收到的是一个列表变量 比方说这里我读取文件名,

  • 本文向大家介绍SQL中Merge用法详解,包括了SQL中Merge用法详解的使用技巧和注意事项,需要的朋友参考一下 MERGE语句是SQL语句的一种。在SQL Server、Oracle数据库中可用,MySQL、PostgreSQL中不可用。MERGE是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表(原数据表,source table)或子查询的