mysql distinct 和 group by 去重

news2024/12/28 2:14:22

标题mysql distinct 和 group by 去重

一、先说结论:

MySQL中常用去重复数据的方法是使用 distinct 或者 group by

group by 分组后,如果没有对分组后的数据进行操作,如使用聚合函数/分组函数:count、sum、avg、max 、min,分组后直接显示该分组的第一条数据。

二、接下来看示例:

说明:
有一个事件评论表,针对每个事件,用户都可以发表评论,每发表一次评论,会生成一条记录

需求:
查询出每个事件中的最新评论

Sql脚本:

DROP TABLE IF EXISTS t1;
CREATE TABLE t1
(
    event_id   VARCHAR(32) NOT NULL COMMENT '事件id',
    save_id    VARCHAR(32) NOT NULL COMMENT '评论编号(评论一次生成一个)',
    remark     VARCHAR(512) COMMENT '评论',
    created_by VARCHAR(32) COMMENT '创建者',
    created_at DATETIME    NOT NULL COMMENT '创建时间',
    PRIMARY KEY (event_id, save_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT = '事件评论表';

insert into t1(event_id,save_id,remark,created_by,created_at) values
('33382DC38943452787801511501F82','ACAC06C970484598BEC213552CC2445C','666','Ken','2023-01-01 09:52:03')
, ('33382DC38943452787801511501F82','DDAFBB48ECBA4BC5B8DD560F97E813DD','牛','Bebe','2023-01-02 13:36:25')
, ('3C9E84678DA84DFDA3AA0F4669E7DFA3','3F0921BC070F49D5801B169488113AEE','手动狗头-','Merry','2023-02-05 22:48:42')
, ('9612173DE985409D8CC7DEC9AE4D925','141CC3D1F95B47BA9D5DAAEDB66CA4BE','已阅','Nancy','2023-03-07 08:01:01')
, ('9612173DE985409D8CC7DEC9AE4D925','4747F063294447B6A469D4ED272AF1KL','已阅+1','Bebe','2023-03-08 10:32:30')
, ('9612173DE985409D8CC7DEC9AE4D925','82F18CCDDB194BA18D3911C387D4B326','已阅+2','Alan','2023-03-08 10:32:30');

在这里插入图片描述

步骤:
1、查询出每个事件的最大创建时间(最新记录)

SELECT event_id, MAX(created_at) AS created_at
FROM t1
GROUP BY event_id;

在这里插入图片描述

2、内联查询,查询出其他数据

SELECT
	   DATA.*
FROM (
		SELECT event_id, MAX(created_at) AS created_at
		FROM t1
		GROUP BY event_id
	) LATEST
	INNER JOIN (
		SELECT *
		FROM t1
	) DATA
		ON LATEST.event_id = DATA.event_id AND LATEST.created_at = DATA.created_at;

在这里插入图片描述

发现问题:
          看起来似乎没有问题,但是发现却查出了4条记录
          虽然在上一步中,取MAX(created_at) 只有3条记录,但这里进行内联查询时会有4条记录

          因为最后2个评论的创建时间是相同的,
          如果说只取每个事件中的最新评论,其实这2条数据任一即可,因此需要去重!

解决问题:
          在语句最后面加上 GROUP BY 进行去重

最终sql:

SELECT
	   DATA.*
FROM (
		SELECT event_id, MAX(created_at) AS created_at
		FROM t1
		GROUP BY event_id
	) LATEST
	INNER JOIN (
		SELECT *
		FROM t1
	) DATA
		ON LATEST.event_id = DATA.event_id AND LATEST.created_at = DATA.created_at
-- 去重
GROUP BY DATA.event_id, DATA.created_at;

在这里插入图片描述

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

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

相关文章

封装Python脚本:使用pymysql+sshtunnel,支持通过SSH隧道方式链接mysql数据库

一、前言 通常为了保证数据库安全,不会允许直接连接数据库,而是需要通过SSH隧道去连接服务器背后的数据库;通过Navicat操作如下: 二、python封装脚本 # -*- coding: utf-8 -*- # Time : 2023/5/12 11:04 # Author : chen…

Activity内存泄漏时包含的view还有没有的救?

Activity泄漏会导致该Activity引用到的Bitmap、DrawingCache等无法释放,对内存造成大的压力,兜底回收是指对于已泄漏Activity,尝试回收其持有的资源,泄漏的仅仅是一个Activity空壳,从而降低对内存的压力。 做法也非常简…

ssh终端工具推荐-WindTerm

什么是WindTerm 官方github https://github.com/kingToolbox/WindTerm A Quicker and better SSH/Telnet/Serial/Shell/Sftp client for DevOps. 按官方说明,WindTerm是一个更快更好的SSH/Telnet/Serial/Shell/Sftp的DevOps工具。 WindTerm目前对商业是免费无限制…

QML APP开发套路(二):前/后端交互概述

(1)QML开发简介 Qt应用框架在传统UI(QWidget窗体)的基础上,提供了Qt Quick模块,该模块基于 QML 语言来定义UI及交互方式。区别于 QWidget 定义UI的方式,QML利于将UI交互与业务逻辑处理剥离成前…

什么是智慧校园?

什么是智慧校园? 智慧校园平台是目前教育信息化领域的热点之一。 随着数字化转型的加速,越来越多的学校开始寻求解决方案,以提高教育管理的效率和质量。 在使用智慧校园平台的过程中,一些痛点问题也浮现出来。为解决这些问题&a…

基于AT89C51单片机的贪吃蛇游戏设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87778030 源码获取 主要内容: 设计一个贪吃蛇游戏,使其具有以下游戏规则:①当没有改变方向时,贪吃蛇沿原来路径一直前进②贪吃蛇无法回头,只能异于当前方向改变行动③蛇…

网页更新提醒是什么?如何自动监控网页并自动记录或发送通知?

网页更新提醒是什么? 在互联网信息资源丰富,且更新速度快的情况下,如果需要监控一些网页变化,实现例如热点/热搜/热评监测、商品上新/价格/库存监测、作品上新/评论/点赞监测、招标/投标/拍卖/竞价监测、公告/通知/活动监测等情况…

南京大学主办 | EIScopus检索 | 2023年人工智能与统计学前沿国际会议

2023年人工智能与统计学前沿国际会议 会议简介 Brief Introduction 2023年人工智能与统计学前沿国际会议(CFAIS 2023) 会议时间:2023年8月18日-20日 召开地点:中国南京 大会官网:www.cfais.org 2023年人工智能与统计学国际会议(CFAIS 2023)将…

测评,补单是什么神仙利器?能提高速卖通,国际站,newegg店铺的销量

测评,补单相信这个词对于大部分卖家来说,想必都不陌生,因为都知道它能够快速帮助自己的产品添加评论,获取排名,打造爆款。于是许多卖家潜意识里认为“测评其实就是刷评”。 简单点来说,测评就是卖家通过【评…

485测试

注意如果十六进制发送数据 数据打印时 如果是%c 打印出来的数据会十进制显示 解决方案 1.改变打印方式 %x 打印 2.因为什么也不勾选 ,默认asii显示 利用串口助手发ltz ,打印也是ltz(发什么就显示什么) 如下图所示

如何使用appuploader制作描述文件​

如何使用appuploader制作描述文件​ 承接上文我们讲述了怎么制作证书,本文我们来看下怎么制作描述文件吧。​制作描述文件前我们首先我们来添加一个测试设备,后面再制作描述文件。 1.添加测试设备​ 其中添加设备一项中,根据提示操作添加…

OpenGL ES特效分析 --- 跳动的心

很早之前就见过一个博主发的shader图片,一个跳动的心https://blog.csdn.net/Kennethdroid/article/details/104536532, 感觉太好玩了,于是想要分析一下原理,上面的博主也已经做了初步分析,但是对于我这个特效小白来说还…

VMware Aria Operations 8.12 - 自动驾驶式 IT 运维管理

VMware Aria Operations 8.12 - 自动驾驶式 IT 运维管理 请访问原文链接:https://sysin.org/blog/vmware-aria-operations/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 自动驾驶式 IT 运维管理 VMware Aria Op…

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读

🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊|接辅导、项目定制 ● 难度:夯实基础⭐⭐ ● 语言:Python3、Pytorch3 ● 时间:5月8日-5月12日 🍺要求&#xff…

电脑永久删除文件怎么找回来?分享一种数据恢复方法

电脑对于日常生活和工作都起着重要作用,但是在我们日常办公中,有时会误删除一些文档,甚至永久删除,当我们想找回的时候却手足无措,不知道该怎么办。同时在很多用户的观念里,当我们无法从回收站恢复时&#…

Openai+Coursera: ChatGPT Prompt Engineering(一)

想和大家分享一下最近学习的Coursera和openai联合打造ChatGPT Prompt Engineering在线课程,下面是通过API来访问ChatGPT的主要代码: import openaiopenai.api_key XXXXXXXXXdef get_completion(prompt, model"gpt-3.5-turbo"):messages [{&…

【OpenCV】学习课-图像裁剪与拼接(2)!

1. 图像的裁剪 cv2.selectROI() ###可以通过鼠标选择感兴趣的矩形区域(ROI) import cv2img cv2.imread("xxx.png", flags1) # flags1 读取彩色图像(BGR)roi cv2.selectROI(img, showCrosshairTrue, fromCenterFalse) xmin, ymin, w, h…

2022年平均工资出炉,IT行业又是第一

根据5月9日国家统计局最新资料显示,2022年,全国城镇非私营单位就业人员年平均工资为114029元,比上年增长6.7%,扣除通胀后实际增长4.6%。其中,行业间的差距相当明显。根据资料显示,2022年无论是在私营单位还…

ESP8266(1):搭建Linux环境ESP8266_RTOS_SDK,ESP8266使用GPIO控制继电器

0)准备工作,之前一直对esp8266不了解,现在想着给鱼缸加个定时打氧的程序,控制泵的工作。所以购买了一个esp8266 Relay,自己摸索写个简单程序。让泵工作一段时间,再休眠一段时间。 1)宿主机Ubuntu 20.04.5 …

Vue 项目利用 HBuilderX 打包 APP 流程

想要将 Vue 打包成 App,要借助一些插件工具,例如:Electron、Cordova 等,或者直接利用开发工具,例如:Android Studio、HBuilderX 等。本文的目的是带大家通过 HBuilder 开发工具对 Vue 项目进行打包。 一、…