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

SQL如何按ID分组统计Transport列唯一值 避免Product导致重复计数

问题解决方案

核心处理逻辑分两步,从根源规避多Product关联导致的Transport重复计数问题:

  • 先对ID和Transport字段做组合去重,同一个ID下不管多少个Product关联同一个Transport,都只保留1条有效记录
  • 基于去重后的结果做条件聚合,直接判断对应Transport是否存在,标记1/0即可,无需做count计数

通用SQL实现(兼容所有支持SQL92标准的数据库,包括MySQL、PostgreSQL、SQL Server、Oracle等)

SELECT
    ID,
    MAX(CASE WHEN Transport = 'Plane' THEN 1 ELSE 0 END) AS Plane,
    MAX(CASE WHEN Transport = 'Train' THEN 1 ELSE 0 END) AS Train,
    MAX(CASE WHEN Transport = 'Ship' THEN 1 ELSE 0 END) AS Ship
FROM (
    -- 子查询完成ID+Transport维度去重,消除Product关联带来的重复数据
    SELECT DISTINCT ID, Transport
    FROM 替换成你的实际表名
) AS dedup_transport
GROUP BY ID;

逻辑说明

  • 子查询的DISTINCT ID, Transport会直接过滤冗余重复数据:比如ID=1下Product A、B都对应Plane,子查询只会保留1条(1, 'Plane')记录,从数据源层面避免重复
  • 外层聚合用MAX()而非COUNT():只要去重结果中存在对应Transport的记录,CASE判断返回的1就会被MAX取到,不存在则返回0,完全不会出现计数翻倍的问题
  • 运行结果和预期完全匹配:
    • ID=1:Plane=1、Train=0、Ship=0
    • ID=2:Plane=0、Train=1、Ship=1
    • ID=3:Plane=1、Train=1、Ship=1

如果后续Transport枚举值有新增,只需要在外层SELECT里新增对应的CASE判断行即可,不需要调整核心去重逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:39:17