当前位置: 代码网 > it编程>数据库>Mysql > MYSQL统计总条数(需去重)使用的办法总结

MYSQL统计总条数(需去重)使用的办法总结

2025年11月14日 Mysql 我要评论
以下是关于 sql 中 group by 和 distinct 关键字的区别。group by 和 distinct 的区别1. 定义distinct:用于消除查询结果中的重复行,返回唯一值组合。作用

以下是关于 sql 中 group bydistinct 关键字的区别。

group by 和 distinct 的区别

1. 定义

  • distinct:
    • 用于消除查询结果中的重复行,返回唯一值组合。
    • 作用于整个 select 子句的列集。
  • group by:
    • 用于将结果集按指定列分组,通常与聚合函数(如 countsum)结合使用。
    • 返回分组键和聚合计算结果。

2. 核心目的不同

  • distinct:
    • 专注于 去重,确保结果中无重复记录。
    • 例如:获取唯一客户列表。
  • group by:
    • 专注于 分组和聚合,用于生成汇总统计。
    • 例如:计算每个地区的销售总额。

3. 语法结构差异

  • distinct 语法:
    • 直接应用于 select 子句。
    • 示例:
      select distinct column1, column2 from table_name;
      
  • group by 语法:
    • 需要 group by 子句,且 select 中必须包含分组列或聚合函数。
    • 示例:
      select column1, count(column2) from table_name group by column1;
      

4. 结果集区别

  • distinct 结果:
    • 返回原始列的唯一组合,不包含额外计算。
    • 输出行数 ≤ 原始数据行数。
  • group by 结果:
    • 返回分组键(如 column1)和聚合值(如 count(column2))。
    • 输出行数 = 分组键的唯一值数量。

5. 与聚合函数的结合性

  • distinct:
    • 不能直接与聚合函数结合(例如 select distinct count(column) 无效)。
    • 如需聚合,需嵌套子查询。
  • group by:
    • 必须与聚合函数一起使用(如 sumavg)。
    • 聚合函数作用于每个分组内部。

6. 使用场景对比

  • 适用 distinct 时:
    • 需要简单去重,无统计计算。
    • 示例:列出所有不重复的产品类别。
  • 适用 group by 时:
    • 需要分组统计或汇总分析。
    • 示例:计算每个部门的平均工资。

7. 示例对比(基于示例表employees)

employeeiddepartmentsalary
1hr5000
2it6000
3hr5500
4it6500
  • distinct 示例

    select distinct department from employees;
    

    结果

    department
    hr
    it
  • group by 示例

    select department, avg(salary) as avgsalary from employees group by department;
    

    结果

    departmentavgsalary
    hr5250
    it6250

8.性能差距比较

在一张百万级的表里,统计 根据指定列 (去重后)的总行数。

-- 测试distinct性能
explain select count(distinct column_name) 
from table_name 
where conditions;

-- 测试group by性能
explain select count(*) 
from (
  select column_name
  from table_name
  where conditions
  group by column_name
) as tmp;

1. 一般情况下的性能表现

distinct通常更好,原因如下:

distinct是专门为去重设计的操作符,数据库优化器对其有专门的优化

语法更简洁,意图更明确

在大多数情况下,distinct的执行效率更高

2. 选择依据条件

  • 数据量影响:
    小到中等数据量:distinct性能通常更好
    大数据量:需要考虑索引和具体查询条件
  • 重复率影响:
    低重复率(去重后数据量接近原始数据量):两者性能相近,distinct略优
    高重复率(去重后数据量远小于原始数据量):distinct优势更明显
  • 索引情况:
    如果去重字段有索引,distinct性能更好
    复合索引对两种方法都有帮助

9. 总结

  • distinct:简单去重工具,适合返回唯一值列表。
  • group by:分组聚合工具,适合生成统计摘要。
  • 关键选择依据:是否需要聚合计算——如果需要,用 group by;如果仅需去重,用 distinct

总结

到此这篇关于mysql统计总条数(需去重)使用办法的文章就介绍到这了,更多相关mysql统计去重总条数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com