公司网站是不是每天要更新,百姓网二手车,wordpress not found,可以做推送的网站MySQL中distinct和group by去重的区别 在MySQL中#xff0c;我们经常需要对查询结果进行去重#xff0c;而DISTINCT和GROUP BY是实现这一功能的两种常见方法。虽然它们在很多情况下可以互换使用#xff0c;但它们之间还是存在一些差异的。接下来#xff0c;我们将通过创建测…MySQL中distinct和group by去重的区别 在MySQL中我们经常需要对查询结果进行去重而DISTINCT和GROUP BY是实现这一功能的两种常见方法。虽然它们在很多情况下可以互换使用但它们之间还是存在一些差异的。接下来我们将通过创建测试数据和执行不同的查询来探讨这两种方法的区别。
目录
创建测试数据DISTINCT使用[GROUP BY使用](#GROUP BY使用)[distinct和group by的区别](#distinct和group 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 CHARSETutf8mb4;-- 添加测试数据
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;多列去重
根据aid和uid联合去重
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只能展示去重的列。
多列去重
根据aid和uid联合去重
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 BY和DISTINCT都可以使用索引此情况下它们的性能是相同的。而当去重的字段没有索引时DISTINCT的性能可能会高于GROUP BY因为在MySQL 8.0之前GROUP BY有一个隐藏的功能会进行默认的排序这样就会触发filesort从而导致查询性能降低。
总结
大部分场景下DISTINCT是特殊的GROUP BY但二者也有细微的区别比如它们在查询结果集上、使用的具体业务场景上以及性能上都是不同的。了解这些差异可以帮助我们根据实际需求选择更合适的方法。