You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询修改:统计各水果去重数及重复总数需求

解决MySQL水果统计需求:去重数量+总重复次数

没问题,我来帮你搞定这个统计需求!先理清楚两个核心指标的逻辑:

  • 去重数量:每种水果对应的唯一记录数(比如同一水果但不同属性的条目算不同的唯一记录)
  • 总重复次数:该水果的总记录数减去去重后的数量,也就是所有重复记录的总和

假设你的表名为fruit_records,存储水果名称的列是fruit_name,同时你需要基于color、weight这些字段判断记录是否重复(可根据你的实际表结构调整),可以用下面的SQL查询:

SELECT
    fruit_name,
    COUNT(*) AS total_records,
    -- 用CONCAT_WS拼接需要判断重复的列,避免NULL影响去重逻辑
    COUNT(DISTINCT CONCAT_WS('|', fruit_name, color, weight)) AS distinct_count,
    -- 总重复次数 = 总记录数 - 去重后的唯一记录数
    COUNT(*) - COUNT(DISTINCT CONCAT_WS('|', fruit_name, color, weight)) AS total_dup_count
FROM fruit_records
GROUP BY fruit_name;

关键细节说明:

  • 如果你的去重逻辑只需要基于某一列(比如唯一标识列fruit_id),直接把CONCAT_WS(...)换成该列即可,比如COUNT(DISTINCT fruit_id)
  • CONCAT_WS的作用是把多列拼接成一个字符串,确保只有当所有指定列都相同时,才会被判定为重复记录,分隔符|可以换成其他不会出现在字段值里的符号
  • 如果你的需求是仅统计水果名称本身的重复(即不管其他属性,只要水果名相同就算重复),那去重数量固定为1,总重复次数就是COUNT(*) - 1,对应的查询可以简化:
SELECT
    fruit_name,
    1 AS distinct_count,
    COUNT(*) - 1 AS total_dup_count
FROM fruit_records
GROUP BY fruit_name;

举个实际数据的例子,假设你的表有这些数据:

fruit_namecolorweight
苹果红100
苹果红100
苹果绿120
香蕉黄80
香蕉黄80
香蕉黄80

用第一个查询得到的结果会是:

fruit_nametotal_recordsdistinct_counttotal_dup_count
苹果321
香蕉312

完全符合你要的两个统计值~

内容的提问来源于stack exchange,提问作者vardha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:24:45