PostgreSQL如何对两列组合去重后计算valid_entries的总和
问题原因
你写的SQL存在两个核心问题:
- 子查询仅返回了
count(distinct(codes))的统计结果,没有包含valid_entries字段,外层sum函数无法找到对应字段完成计算 - 去重逻辑仅针对Codes单列,没有按照你的需求对
valid_entries和Codes两列组合去重,逻辑不符合预期
正确实现
你可以先通过子查询完成两列组合去重,再对去重后的valid_entries求和即可,写法如下:
SELECT SUM(valid_entries) AS total_valid FROM ( -- 对valid_entries和Codes两列组合去重,保留唯一行 SELECT DISTINCT valid_entries, Codes FROM points WHERE participant_id = '123' ) AS distinct_point_rows;
如果你后续需要对分组做更多统计,也可以用GROUP BY的写法实现同样效果:
SELECT SUM(valid_entries) AS total_valid FROM ( SELECT valid_entries FROM points WHERE participant_id = '123' -- 按两列分组等价于组合去重 GROUP BY valid_entries, Codes ) AS grouped_point_rows;
两种写法的执行结果都是你预期的4。
内容的提问来源于stack exchange,提问作者Xux.rd
相关产品推荐
相关产品推荐

