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

SQL按年份去重统计productcompanyID出现次数的方法

问题分析

你原有SQL的错误点在于:直接按productcompanyID分组统计所有匹配行的数量,写在SELECT后的DISTINCT不会对分组内的同一年份重复记录做过滤,因此统计的是该ID所有的记录条数,而非去重后的年份覆盖数,才会得到ID1为6、ID2为4的错误结果。

正确实现方案

你的统计规则核心是:同一productcompanyID在同一年份无论出现多少次,仅计数1次,本质是统计每个ID覆盖的不重复年份数量,有两种常用写法:

写法1:直接使用COUNT(DISTINCT)(最简洁)

直接在聚合时对年份字段去重计数,无需额外子查询:

SELECT
  productcompanyID,
  COUNT(DISTINCT yearName) AS appear_count
FROM mydatabase
GROUP BY productcompanyID;

执行后会直接返回你预期的结果:ID1计数为2(覆盖2001、2002两个年份),ID2计数为3(覆盖2001、2002、2003三个年份)。

写法2:先去重再统计(逻辑更直观,适合新手理解)

第一步先把(yearName, productcompanyID)的重复组合全部去掉,得到每个公司每年仅保留1条记录的中间结果,再基于中间结果分组计数:

-- 第一步:生成去重后的年份-公司ID对应关系
WITH dedup_result AS (
  SELECT DISTINCT yearName, productcompanyID
  FROM mydatabase
)
-- 第二步:按公司ID分组统计条数
SELECT
  productcompanyID,
  COUNT(*) AS appear_count
FROM dedup_result
GROUP BY productcompanyID;

该写法的执行结果和写法1完全一致,逻辑拆分更清晰,适合初学者理解去重的过程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:45:39