根据特定列中的 DISTINCT 值创建 CASE WHEN 标签

问题描述

我有以下形式的数据:

ID 类别 数量
1 A 100
1 B 200
1 B 150
1 C 500
2 B 20
3 A 100
1 B 100

我希望按列 ID 进行分组,找出每个 ID 组存在的类别的 disTINCT 类型并创建一个新列,我可以在其中根据存在的唯一或不同类别为每个分组 ID 创建以下分类标签,以及还计算每个分组 ID 的相应金额总和。所以输出应该如下:

ID 分类 金额总和
1 全部 950
1 B only 20
1 仅限 A 和 B 200

我尝试了以下 sql 代码,但它不起作用,很可能是因为 CASE WHEN 语句中的 disTINCT() 命令无法考虑多个值。

我的查询

SELECT
ID,(CASE WHEN disTINCT(CATEGORY) IN ("A") then "A Only" WHEN WHEN disTINCT(CATEGORY) IN ("B") THEN "B only"..........)
SUM(AMOUNT)
FROM Table
GROUP BY 1,2

我尝试了多种将 disTINCT 语句与 CASE WHEN 结合使用的方法,但都没有奏效。

解决方法

嗯。 . .这个怎么样?

select id,(case when min(category) = max(category)
             then min(category) || ' only'
             when count(distinct category) = 3
             then 'All'
             when min(category) is NULL
             then 'None'
             else min(category) || ' and ' || max(category)
        end)
from t
group by id;