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

PostgreSQL中实现无重复记录计数的方法求助

实现建议:去重后按SP计数

嘿,我来帮你搞定这个需求!从你的数据和期望结果来看,核心是先按SP、MA、NG这三个字段的组合去重(因为jame的三条记录这三个字段完全一致,不管SL值不同,都算同一组;而pink有两组不同的SP+MA+NG组合,所以计数是2),然后再按SP统计每组的数量。

下面给你几种不同的实现方式,适配不同的数据库场景:

1. 通用写法(所有数据库支持)

这种方式用子查询先取出唯一的SP+MA+NG组合,再分组计数,兼容性最好:

SELECT SP, COUNT(*) AS count
FROM (
    -- 先去重:保留唯一的SP、MA、NG组合
    SELECT DISTINCT SP, MA, NG FROM your_table_name
) AS unique_records
GROUP BY SP;

2. 简洁写法(支持多字段DISTINCT的数据库)

如果你的数据库支持多字段的COUNT(DISTINCT)(比如PostgreSQL、MySQL 8.0+、SQL Server等),可以用更简洁的语句:

PostgreSQL 版本

SELECT SP, COUNT(DISTINCT ROW(MA, NG)) AS count
FROM your_table_name
GROUP BY SP;

MySQL 版本

SELECT SP, COUNT(DISTINCT (MA, NG)) AS count
FROM your_table_name
GROUP BY SP;

通用多字段拼接写法(注意分隔符避坑)

如果你的数据库不支持直接对多字段用COUNT(DISTINCT),可以用拼接字段的方式,但要注意选择一个不会出现在MA/NG里的分隔符(比如|):

SELECT SP, COUNT(DISTINCT CONCAT(MA, '|', NG)) AS count
FROM your_table_name
GROUP BY SP;

结果验证

把以上语句中的your_table_name替换成你的实际表名,执行后就能得到你期望的结果:

SP count
jame 1
pink 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:47:47