SQL 分组查询如何处理重复值统计?

使用COUNT(DISTINCT)统计去重数量,COUNT(*)或COUNT(列名)统计包含重复的数量,根据业务需求选择以准确反映数据情况。

在 SQL 分组查询中处理重复值统计,关键在于明确你想要统计的内容:是去重后的数量,还是包含重复的原始数量。通过合理使用 COUNT() 配合 DISTINCT 或不使用 DISTINCT,可以灵活控制是否忽略重复值。

统计去重后的数量(排除重复值)

当你需要统计某一列中不同值的数量(即去除重复项),可以在 COUNT 函数中使用 DISTINCT:

  • SELECT category, COUNT(DISTINCT user_id) AS unique_users
  • FROM orders
  • GROUP BY category;

这条语句会按商品类别分组,并统计每个类别中不同用户的数量,相同的 user_id 只算一次。

统计所有记录数量(包含重复值)

如果希望保留重复值,直接使用 COUNT(*) 或 COUNT(列名) 即可:

  • SELECT ca

    tegory, COUNT(user_id) AS total_orders
  • FROM orders
  • GROUP BY category;

这会统计每个类别下所有订单对应的 user_id 数量,即使同一个用户多次下单也会全部计入。

同时统计去重和不去重的数据

有时需要对比分析,可以同时展示两种统计结果:

  • SELECT
  •   department,
  •   COUNT(*) AS total_records,
  •   COUNT(DISTINCT employee_id) AS unique_employees
  • FROM attendance
  • GROUP BY department;

这样能清楚看到每个部门的打卡总次数和实际出勤人数之间的差异。

基本上就这些。关键是根据业务需求选择是否使用 DISTINCT,逻辑清晰就能准确反映数据情况。