distinct 和 group by有什么区别

MySQL 中 DISTINCT 和 GROUP BY 的区别与联系 MySQL中DISTINCT与GROUP BY都能实现数据去重,但存在关键区别:DISTINCT直接去除重复行返回完整数据,适合简单去重场景;GROUP BY按列分组并支持聚合统计,更适用于数据分析。在NULL处理上,DISTINCT将所有NULL视为相同,而GROUP BY会将NULL作为独立分组。性能方面,MySQL 8.0后二者效率接近,但GROUP BY在有索引时表现更优。通过employees表示例可见,DISTINCT适合获取唯一值组合,而GROUP BY更适合分组统计计算。 阅读详情

在mysql中,最常见的去重方式有两种:使用distinct或使用group by ,那它们有什么区别

1、创建测试数据

-- 创建测试表
drop table if exists pageview;
create table pageview(
    id bigint primary key auto_increment comment '自增主键',
    aid bigint not null comment '文章ID',
    uid bigint not null comment '(访问)用户ID',
    createtime datetime default now() comment '创建时间'
) default charset='utf8mb4';
-- 添加测试数据
insert into pageview(aid,uid) values(1,1);
insert into pageview(aid,uid) values(1,1);
insert into pageview(aid,uid) values(2,1);
insert into pageview(aid,uid) values(2,2);

显示的效果如下:
在这里插入图片描述

2、distinct使用

distinct基本语法如下:

SELECT DISTINCT column_name,column_name FROM table_name;
2.1 单列去重

我们先用 distinct 实现单列去重,根据 aid(文章 ID)去重,具体实现如下:

select distinct aid from pageview

在这里插入图片描述

2.2 多列去重

除了单列去重之外,distinct还支持多列(两列及以上)去重,我们根据aid(文章id)和uid(用户id)联合去重,具体实现如下:

select distinct aid,uid from pageview

在这里插入图片描述

2.3 聚合函数+去重

使用distinct + 聚合函数去重,计算aid去重之后的总条数,具体实现如下:

select count(distinct aid) from pageview

在这里插入图片描述

3 group by使用

group by 基本语法如下:

SELECT column_name,column_name FROM table_name 
WHERE column_name operator value 
GROUP BY column_name
3.1 单列去重

根据aid去重,具体实现如下:

select * from pageview group by aid;

在这里插入图片描述
与distinct相比group by 可以显示更多的列,而distinct只能展示去重的列。

3.2 多列去重

根据 aid(文章 ID)和 uid(用户 ID)联合去重,具体实现如下:

select * from pageview group by aid,uid;

在这里插入图片描述

3.3 聚合函数 + group by

统计每个 aid 的总数量,SQL 实现如下:

select aid,count(aid) from pageview group by aid

在这里插入图片描述
从上述结果可以看出,使用 group by 和 distinct 加 count 的查询语义是完全不同的,distinct + count 统计的是去重之后的总数量,而 group by + count 统计的是分组之后的每组数据的总数

4 distinct和group by 区别

1、区别1:查询结果集不同
当使用distinct去重时,查询结果集中只有去重列信息
如下所示:

select  distinct aid from pageview;

在这里插入图片描述
当你试图添加非去重字段(查询)时,SQL 会报错如下图所示:
在这里插入图片描述
而使用 group by 排序可以查询一个或多个字段,如下图所示:

select * from pageview group by aid;

在这里插入图片描述

2、区别2:使用业务场景不同
统计去重之后的总数量需要使用 distinct,而统计分组明细,或在分组明细的基础上添加查询条件时,就得使用 group by 了。使用 distinct 统计某列去重之后的总数量:

select aid,count(distinct aid) from pageview;

在这里插入图片描述
统计分组之后数量大于2的文章,就要使用group by,如下图所示:

-- 统计分组之后数量大于 2 的文章
select * from pageview group by aid having count(aid) >= 2

在这里插入图片描述

3、区别3:性能不同
如果去重的字段有索引,那么group by 和distinct都可以使用索引,此情况他们的性能是相同的;而当去重的字段没有索引时,distinct的性能就会高于group by ,因为在MySQL8.0之前,group by 有一个隐藏的功能会进行默认的排序,这样就会触发filesort从而导致查询性能降低。

总结:
大部分场景下distinct是特殊的group by ,但是二者也有细微的区别,比如他们在查询结果集上,使用的具体业务场景上,以及性能上都是不同的。

group by 效率高还是distinct效率高?你得先看什么数据库。 其实取消这种操作也好,众多数据库中也就mysql有这种排序操作,而且只排序第一个group by 子句中的字段,对于不需要排序的查询需求,无疑是增加不必要的执行负担。可是group by在不同的数据库中语法是区别很大的:比如mysql中比较灵活,group by子句中的字段和select子句中字段关联不大,group by中的字段可以出现在select 中,也可以不出现。而mysql的排序还是仅限于对紧跟group by的第一个字段进行排序,多字段分组的情况下,除了第一个字段,其他的并不做排序。 阅读详情

相关推荐

【面试题系列】MySQL 中 GROUP BY 和 DISTINCT 有什么区别?

在 MySQL 中,`GROUP BY` 和 `DISTINCT` 是两个常用的 SQL 子句,它们都用于处理数据的重复性,但在使用场景、语法、功能和性能方面存在显著差异。本文将详细探讨这两者的区别,包括其语法、功能特点、使用场景及性能考虑,并通过丰富的案例来帮助理解。最后,我们将讨论如何在面试中回答有关这两个概念的问题。

颜淡慕潇 1万+

distinct 、group by 的区别

select distinct(university) from user_profile; select university from user_profile group by university;二者返回的结果式样的。但是既然一样,为什么又要做两个函数呢?来看看它们的区别 ———————————————— distinct 支持单列、多列的去重 单列去重的方式简明易懂,即相同值只保留1个;多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。 dis

qq_36061501的博客 1万+

MIPI转LVDS芯片调试实战:从Kernel到UEFI的完整点亮流程

本文详细解析了MIPI转LVDS芯片调试的全流程,从Kernel驱动开发到UEFI早期初始化,涵盖I2C通信、电源时序控制等核心挑战。通过LT9211芯片实战案例,提供设备树配置、电源时序优化及显示异常排查等实用技巧,助力工程师高效完成屏幕调试工作。

weixin_30314813的博客 449

distinct和group by

一、区别和相同点 这两个都是用于数据去重的。 相同点:无论对一个字段去重还是对多个字段去重,他俩得到的结果集相同。 效率上的区别: 数据分布 去重方式 原因 离散 group distinct空间占用较大,在时间复杂度允许的情况下,group 可以发挥空间复杂度优势 集中 distinct distinct空间占用较小,可以发挥时间复杂度优势

mwj_88的专栏 1455

一本集成电路静态时序设计经典之作(可下载)

本书全面深入探讨集成电路设计中关键技术的专著,涵盖了从基础知识到高级应用的各个方面。本书详细介绍了集成电路的发展历程、**静态时序分析的重要性、基本时序模型、时序信息库文件的构建、时序约束的设置、串扰噪声的影响及其控制方法**,并通过实战案例展示了如何进行有效的时序分析和优化。

nuoweishizi的博客 848

ISP Tuning实战指南:从基础到高级的色彩与亮度优化

本文详细介绍了ISP Tuning的基础概念与高级调优技术,包括黑电平校正(BLC)、自动白平衡(AWB)、色彩校正矩阵(CCM)和Gamma曲线调整等核心算法。通过实战案例和调试技巧,帮助工程师提升摄像头成像质量,解决高光过曝、暗部噪点等常见问题,适用于智能门铃、车载摄像头等多种场景。

weixin_30879169的博客 107

distinct 和 group by 的区别

前言 我们在sql里面经常看到 distinct 和 group by,那么两者到底有何区别呢?下面就来一探究竟。 首先来看官方描述 链接: Mysql distinct 传送门 其中有这么一段描述: Generally speaking, the DISTINCT clause is a special case of the GROUP BY clause. The difference between DISTINCT clause and GROUP BY clause is that the G

贾廷帅的博客 4169

保姆级教程:用Jetson Orin Nano和ROS2 Humble搞定PIXhawk 4飞控通信(含配置文件详解)

本文提供了一份详细的Jetson Orin Nano与PIXhawk 4飞控通信配置指南,涵盖硬件连接、ROS2 Humble环境搭建、MAVROS2配置及通信调试全流程。通过实战案例和配置文件详解,帮助开发者快速实现无人机上位机与飞控的稳定通信,适用于无人机开发与自动化控制场景。

weixin_33670786的博客 475

DISTINCT和GROUP BY的区别

其实二者没有什么可比性,但是对于不包含聚集函数的GROUP BY操作来说,和DISTINCT操作是等价的。不过虽然二者的结果是一样的,但是二者的执行计划并不相同。 distinct只是将重复的行从结果中出去; group by是按指定的列分组,一般这时在select中会用到聚合函数。 distinct是把不同的记录显示出来。 group by是在查询时先把纪录按照类别分出来再查询。

专心学习 4万+

ZYNQ软件复位重启、程序跳转的实现方法(Multiboot)

目录一、增加FSBL的调试信息 一、增加FSBL的调试信息 启动过程的调试信息如下: Xilinx First Stage Boot Loader Release 2016.4 Jan 19 2020-10:35:00 Devcfg driver initialized Silicon Version 3.1 Boot mode is QSPI Single Flash Informat...

weixin_41922484的博客 2万+

【反卷积算法】Richardson-Lucy (RL) :通过不断迭代更新图像估计值

Richardson-Lucy(RL)反卷积算法:是一种基于最大似然估计(Maximum Likelihood Estimation, MLE)的图像去卷积方法,常用于去模糊和图像增强。通过不断地更新图像估计值,来最小化模糊图像和恢复图像之间的误差,逐步消除模糊,最终接近真实的原始图像,每次迭代都会根据当前估计的图像来修正下次迭代的结果。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 3035

面试官:GROUP BY和DISTINCT有什么区别?

用途:DISTINCT 用于从查询结果中去除重复的行,确保返回的结果集中每一行都是唯一的。语法:通常用于 SELECT 语句中,紧跟在 SELECT 关键字之后。例如以下 SQL:sql代码解读复制代码FROMtable_name;工作机制:DISTINCT 会对整个结果集进行去重,即只要结果集中的某一行与另一行完全相同,就会被去除。用途。

z1ztai的博客 1147

C#函数返回多个值实现实例

本文实例讲解C#函数返回多个值多种实现方法。

qq_30725967的博客 1170

GROUP BY和DISTINCT有什么区别?

GROUP BY和DISTINCT是 SQL 中用于处理重复数据的两个不同的功能。

边走、边悟、迟早变好 1031

C++ Qt6 qml CMakeLists.txt如何添加qrc文件

本文介绍了在Qt6项目中如何通过CMake管理QML图片资源。相比Qt5的qmake,CMake需要手动创建qrc文件并配置CMakeLists.txt。关键步骤包括:1)创建resources.qrc文件并添加图片资源;2)在CMakeLists.txt中设置CMAKE_AUTORCC为ON开启自动资源处理;3)使用qt_add_resources将qrc文件绑定到项目。配置完成后,可通过"qrc:alias"方式引用资源图片,解决了相对路径管理复杂的问题。

琅嬛福地 1453

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

GROUP BY和DISTINCT有什么区别

I learned something simple about SQL the other day: 前几天,我学到了一些关于SQL的简单知识: SELECT c FROM myTbl GROU

CHCH998的博客 513

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Hive 中 group by 和 distinct的区别

DISTINCT本质是GROUP BY的语法糖,在 Hive 中性能相当或略差;而GROUP BY更灵活、可优化、支持聚合,是生产环境的首选。尤其对于,应主动改写为子查询 +GROUP BY避免性能灾难。

走过冬季 420

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

面试突击63:distinct 和 group by有什么区别?

作者 | 磊哥来源 | Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)在 MySQL 中,最常见的去重方法有两个:使用 distinct 或使用 group by,那它们有什么区别呢?接下来我们一起来看。1.创建测试数据--创建测试表 droptableifexistspageview; createtabl...

磊哥聊Java 6559

MySQL中distinct和group by去重的区别

大部分场景下DISTINCT是特殊的GROUP BY,但二者也有细微的区别,比如它们在查询结果集上、使用的具体业务场景上,以及性能上都是不同的。了解这些差异可以帮助我们根据实际需求选择更合适的方法。

2401_85373732的博客 1066

group by与distinct的区别

举例来说可能方便一点。 A表 id num a 1 b 2 c 3 a 4 c 7 d 3 e 5 如果只选出id列,用distinct和group by 一样的。 select distinct(id) from A; id a b c d e; select id from A group by id; id a b c d e; 不同之处可能在于group by有排序功能。 但是如果需要加上

syc001的专栏 1万+
上一篇: java中收集父节点下的所有子节点
下一篇: Java开发中常见的坑
程序员老石
博客等级 码龄8年 286粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值