欢迎投稿

今日深度:

MySQL中distinct和groupby去重的区别解析,

MySQL中distinct和groupby去重的区别解析,


目录
  • MySQL中distinct和group by去重的区别
  • 创建测试数据
  • DISTINCT使用
    • 单列去重
    • 多列去重
    • 聚合函数+去重
  • GROUP BY使用
    • 单列去重
    • 多列去重
    • 聚合函数 + GROUP BY
  • distinct和group by的区别
    • 查询结果集不同
    • 使用业务场景不同
    • 性能不同
  • 总结

    MySQL中distinct和group by去重的区别

    在MySQL中,我们经常需要对查询结果进行去重,而DISTINCTGROUP BY是实现这一功能的两种常见方法。虽然它们在很多情况下可以互换使用,但它们之间还是存在一些差异的。接下来,我们将通过创建测试数据和执行不同的查询来探讨这两种方法的区别。

    创建测试数据

    首先,我们创建一个测试表pageview,并插入一些数据:

    SQL代码:

    -- 创建测试表
    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);

    DISTINCT使用

    DISTINCT的基本语法如下:

    SELECT DISTINCT column_name, column_name FROM table_name;

    单列去重

    根据aid(文章ID)去重:

    SQL代码:

    SELECT DISTINCT aid FROM pageview;

    多列去重

    根据aiduid联合去重:

    SQL代码:

    SELECT DISTINCT aid, uid FROM pageview;

    聚合函数+去重

    使用DISTINCT+聚合函数计算aid去重之后的总条数:

    SQL代码:

    SELECT COUNT(DISTINCT aid) FROM pageview;

    GROUP BY使用

    GROUP BY的基础语法如下:

    SELECT column_name, column_name FROM table_name 
    GROUP BY column_name;

    单列去重

    根据aid去重:

    SQL代码:

    SELECT aid FROM pageview GROUP BY aid;

    DISTINCT相比,GROUP BY可以显示更多的列,而DISTINCT只能展示去重的列。

    多列去重

    根据aiduid联合去重:

    SQL代码:

    SELECT aid, uid FROM pageview GROUP BY aid, uid;

    聚合函数 + GROUP BY

    统计每个aid的总数量:

    SQL代码:

    SELECT aid, COUNT(*) FROM pageview GROUP BY aid;

    distinct和group by的区别

    查询结果集不同

    使用DISTINCT去重时,查询结果集中只有去重列信息。而使用GROUP BY可以查询一个或多个字段。

    使用业务场景不同

    统计去重之后的总数量需要使用DISTINCT,而统计分组明细或在分组明细的基础上添加查询条件时,就得使用GROUP BY

    性能不同

    如果去重的字段有索引,那么GROUP BYDISTINCT都可以使用索引,此情况下它们的性能是相同的。而当去重的字段没有索引时,DISTINCT的性能可能会高于GROUP BY,因为在MySQL 8.0之前,GROUP BY有一个隐藏的功能会进行默认的排序,这样就会触发filesort从而导致查询性能降低。

    总结

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

    到此这篇关于MySQL中distinct和group by去重的区别的文章就介绍到这了,更多相关MySQL distinct和group by去重内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

    您可能感兴趣的文章:
    • MySQL中使用distinct单、多字段去重方法
    • MySQL中distinct和group by去重效率区别浅析
    • MySQL去重中distinct和group by的区别浅析
    • MySQL中使用去重distinct方法的示例详解
    • MySQL去重该使用distinct还是group by?
    • Mysql中distinct与group by的去重方面的区别
    • mysql distinct去重,IFNULL空值处理方式

    www.htsjk.Com true http://www.htsjk.com/Mysql/48720.html NewsArticle MySQL中distinct和groupby去重的区别解析, 目录 MySQL中distinct和group by去重的区别 创建测试数据 DISTINCT使用 单列去重 多列去重 聚合函数+去重 GROUP BY使用 单列去重 多列去重 聚合函数 + GRO...
    评论暂时关闭