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

 更新时间:2025年11月14日 10:18:42   作者:L逍遥兔L  
在数据库操作中,经常需要处理重复数据的问题,尤其是在进行数据汇总或统计时,这篇文章主要介绍了MYSQL统计总条数(需去重)使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

以下是关于 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统计去重总条数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL8.0中你必须要知道的索引新特性

    MySQL8.0中你必须要知道的索引新特性

    MySQL8.0索引新特性,支持降序索引,降序索引以降序存储键值,下面这篇文章主要给大家介绍了关于MySQL8.0中你必须要知道的索引新特性的相关资料,需要的朋友可以参考下
    2022-11-11
  • mysql截取的字符串函数substring_index的用法

    mysql截取的字符串函数substring_index的用法

    这篇文章主要介绍了mysql截取的字符串函数substring_index的用法,需要的朋友可以参考下
    2014-08-08
  • MYSQL神秘的HANDLER命令与实现方法

    MYSQL神秘的HANDLER命令与实现方法

    这篇文章主要介绍了MYSQL神秘的HANDLER命令与实现方法,需要的朋友可以参考下
    2016-07-07
  • Kettle的MySQL数据源版本问题及解决

    Kettle的MySQL数据源版本问题及解决

    这篇文章主要介绍了Kettle的MySQL数据源版本问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • MySQL查询性能优化武器之链路追踪

    MySQL查询性能优化武器之链路追踪

    这篇文章主要介绍了MySQL查询性能优化武器之链路追踪,optimizer trace优化器追踪,可以帮助我们查看优化器生成执行计划的整个过程,以及做出的各种决策,包括访问表的方法、各种开销计算、各种转换等
    2022-08-08
  • MySQL客户端任意文件读取漏洞方式

    MySQL客户端任意文件读取漏洞方式

    本文介绍了MySQL服务端反向读取客户端任意文件的漏洞原理,利用LOADDATAINFILE语法实现,通过伪造MySQL服务器,客户端读取的文件内容由服务端决定,漏洞复现步骤包括获取脚本、修改配置、运行服务器、客户端连接并查看日志,防范措施包括使用SSL模式和设置local_infile为0
    2025-02-02
  • MySql基础知识总结SQL优化技巧

    MySql基础知识总结SQL优化技巧

    本文深入探讨了MySQL的SQL优化,包括explain分析、索引使用技巧、单表与双表SQL优化、避免索引失效原则、其他优化方法及锁机制,通过实例解析,展示了如何通过修改SQL和创建索引来提升查询性能,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • mysql 8.0.22 zip压缩包版(免安装)下载、安装配置步骤详解

    mysql 8.0.22 zip压缩包版(免安装)下载、安装配置步骤详解

    这篇文章主要介绍了mysql 8.0.22 zip压缩包版(免安装)下载、安装配置步骤详解,本文分步骤通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • InnoDB存储引擎中的表空间详解

    InnoDB存储引擎中的表空间详解

    这篇文章主要介绍了InnoDB存储引擎中的表空间详解,表空间内部,所有页按照区extent为物理单元进行划分和管理,extent由64个物理连续的页组成,表空间可以理解为由一个个物理相邻的extent组成,需要的朋友可以参考下
    2023-09-09
  • MySQL多版本并发控制MVCC详解

    MySQL多版本并发控制MVCC详解

    这篇文章主要介绍了MySQL多版本并发控制MVCC详解,MVCC是通过数据行的多个版本管理来实现数据库的并发控制,这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证
    2022-07-07

最新评论