Sql 如果ID中的任何行包含特定值,请选择此选项
我有一个带有ID及其分类的DB(还有更多现在无用的列), 由于未使用列的不同,一个ID可能具有不同的分类,如:Sql 如果ID中的任何行包含特定值,请选择此选项,sql,oracle,Sql,Oracle,我有一个带有ID及其分类的DB(还有更多现在无用的列), 由于未使用列的不同,一个ID可能具有不同的分类,如: ID Classification 1001 A 1001 A 1002 A 1002 A 1002 B 我需要的是对ID进行分组,并按照规则进行分类:“如果此ID中的任何行是'B'-分类的,则该组(具有此ID的单行)是'B'-分类的,否则为'A'-分类的 所以ID1001=A,但是ID1002=B 我知道WHERE
ID Classification
1001 A
1001 A
1002 A
1002 A
1002 B
我需要的是对ID进行分组,并按照规则进行分类:“如果此ID中的任何行是'B'-分类的,则该组(具有此ID的单行)是'B'-分类的,否则为'A'-分类的
所以ID1001=A
,但是ID1002=B
我知道WHERE tab.field=ANY()
函数,但我有一个相反的情况——比较的左部分应该是ANY,而右部分应该是硬编码的。我有点假设,由于比较结果是布尔值,左\右部分的位置是不相关的,但我无法找出查询子查询关系
请提供帮助您可以使用
计数
窗口功能来执行此操作
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
您可以使用
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
对于兴趣分类也是字母最后一个字母位置的特殊情况,您可以简单地执行以下操作:
SELECT
ID,
MAX(Classification)
FROM tab
GROUP BY ID;
对于兴趣分类也是字母最后一个字母位置的特殊情况,您可以简单地执行以下操作:
SELECT
ID,
MAX(Classification)
FROM tab
GROUP BY ID;
您只需找到每个id的最大分类数:
select id,
max(classification)
from your_table
group by id;
您只需找到每个id的最大分类数:
select id,
max(classification)
from your_table
group by id;
根据“B”>“a”这一事实,您是否可以将
按ID进行分组
与aMAX(分类)
结合使用?分类中的值是否只能是a或B?目前只有2个分类案例\值(它们不是“a”和“B”,而是字符串,因此可以进行比较)。我只是想为未来可能的变化制定一个通用的解决方案。您可以将按ID分组
与aMAX(分类)
相结合,依赖于“B”>“a”?分类中的值只能是a还是B?目前只有2个分类案例\值(它们不是“A”和“B”,而是字符串,因此可以比较)。我只是想为未来可能发生的变化制定通用解决方案,就像一个符咒!用作通用解决方案,谢谢!工作起来像符咒!用作通用解决方案,谢谢!