flag | 1 | 水果需要输出 |
---|---|---|
苹果 | 0 | |
苹果 | 0 | |
苹果 | 0 | |
1 | 个苹果 | 0 |
0 | 橙色 | 1 |
0 | 橙色 | 1 |
0 | 橙色 | 1 |
使用窗口 SUM:
SELECT flag1, fruit,
CASE WHEN SUM(flag1) OVER(PARTITION BY fruit) = 0 THEN 1 ELSE 0 END
FROM tab;
数据库<>小提琴演示
您可以尝试以下操作
--this calculates the required flag for each fruit
with flags (fruit, flagsum) as (
select fruit, 1 - sign(sum(flag)) as flagsum
from fruits
group by fruit
)
--join with the original table
select fr.*, fl.flagsum
from fruits fr inner join flags fl on fr.fruit = fl.fruit
如果该组中至少有一个值为 1 的标志,sign(sum(flag))
返回1
,否则0
返回。因此,1 - sign(sum(flag))
反转了该值。