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

如何正确查询按UniqueId分组的多状态计数数据?

解决行转列(Pivot)需求的SQL方案

这其实是SQL里非常经典的**行转列(Pivot)**场景,刚好你的数据结构很适合用条件聚合来实现,完全不用修改现有表结构就能得到你想要的结果!

核心思路

因为你的status只有固定的三个取值(completed、failed、Attention),我们可以用CASE WHEN语句配合聚合函数,把同一UniqueId下不同状态的Count值映射到单独的列中。

通用SQL写法(兼容绝大多数数据库)

这种方法用条件聚合实现,不管你用MySQL、PostgreSQL、SQL Server还是Oracle都能跑:

SELECT
    UniqueId,
    -- 提取completed状态的Count值,没有则返回0
    SUM(CASE WHEN Status = 'completed' THEN Count ELSE 0 END) AS count_completed,
    -- 提取failed状态的Count值
    SUM(CASE WHEN Status = 'failed' THEN Count ELSE 0 END) AS count_failed,
    -- 提取Attention状态的Count值
    SUM(CASE WHEN Status = 'Attention' THEN Count ELSE 0 END) AS count_Attention
FROM
    your_table_name -- 替换成你的实际表名
GROUP BY
    UniqueId
ORDER BY
    UniqueId;

为什么用SUM?因为每个UniqueId+Status的组合只有一条记录,用SUM或者MAX、MIN结果都是一样的,SUM是最通用的选择。

部分数据库的原生Pivot写法(可选)

如果你的数据库支持原生PIVOT语法(比如SQL Server、Oracle),也可以用更简洁的写法:

SELECT
    UniqueId,
    completed AS count_completed,
    failed AS count_failed,
    Attention AS count_Attention
FROM
    your_table_name -- 替换成你的实际表名
PIVOT
(
    SUM(Count)
    FOR Status IN (completed, failed, Attention)
) AS PivotResult
ORDER BY
    UniqueId;

不过这种写法兼容性稍差,如果你不确定数据库支持情况,优先用上面的条件聚合写法更稳妥。

验证结果

用你提供的示例数据测试,两种写法都会返回你期望的格式:

UniqueIdcount_completedcount_failedcount_Attention
679FCE83-B245-E511-A42C-90B11C2CD708641011
4500990D-F516-E411-BB09-90B11C2CD70810051617
557857BD-6B46-E511-A42C-90B11C2CD708671034

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:02:39