我有一个带有ID及其分类的数据库(以及更多目前无用的列), 由于未使用列的差异,一个ID可能具有不同的分类,如:
ID Classification
1001 A
1001 A
1002 A
1002 A
1002 B
我需要的是对ID进行分组并按规则进行分类“如果此ID中的任何行被'B'分类,则该组(具有此ID的单行)被'B'分类,否则 - 'A'分类。
标识为1001 = A
,但标识为1002 = B
。
我知道WHERE tab.field = ANY()
函数,但我有相反的情况 - 比较的左边部分应该是ANY,而右边部分应该是硬编码的。我有点假设,因为比较结果是布尔值,比左/右部分的位置无关紧要,但我无法弄清楚查询 - 子查询关系。
请帮忙
答案 0 :(得分:1)
您可以使用count
窗口功能执行此操作。
select distinct id
,case when count(case when classification='B' then 1 end) over(partition by id) >=1 then 'B' else 'A' end as classified
from t
答案 1 :(得分:1)
对于感兴趣的分类也是具有最后一个字母位置的字母的特殊情况,您可以简单地执行:
SELECT
ID,
MAX(Classification)
FROM tab
GROUP BY ID;
答案 2 :(得分:0)
您可以简单地找到每个ID的最大分类:
select id,
max(classification)
from your_table
group by id;