Sql 按最大排除值分组
我有下面的输入,希望为每个A获得一个值。从“RE”列中不等于“REV”的值中,获得它们的最大值。如果特定“A”的列“RE”中只有REV值,则返回“REV” 我的Oracle版本是12.1 输入 预期输出(不需要解释列)Sql 按最大排除值分组,sql,oracle,Sql,Oracle,我有下面的输入,希望为每个A获得一个值。从“RE”列中不等于“REV”的值中,获得它们的最大值。如果特定“A”的列“RE”中只有REV值,则返回“REV” 我的Oracle版本是12.1 输入 预期输出(不需要解释列) 一种方法将聚合与coalesce()一起使用: 选择一个, 合并(最大值(重新“旋转”然后重新结束时的情况), 最大值(re) ) 从输入 一组一组; 第一个max()获取所有非修订行的最大值。当所有行都是'REV'时,第二行返回max()。实际上,您也可以将其替换为'REV'
一种方法将聚合与
coalesce()
一起使用:
选择一个,
合并(最大值(重新“旋转”然后重新结束时的情况),
最大值(re)
)
从输入
一组一组;
第一个max()
获取所有非修订行的最大值。当所有行都是'REV'
时,第二行返回max()
。实际上,您也可以将其替换为'REV'
A RE
-- --
A1 REV
A1 C1
A1 C2
A2 REV
A2 REV
A2 C6
A3 REV
A RES EXPLANATION
-- --- -----------
A1 C2 There are values C1 and C2 (excluding REV), so C2 is the max
A2 C6 There is just value C6 (excluding REV).
A3 REV There are no values other than REV.
select a,
coalesce( max(case when re <> 'REV' then re end),
max(re)
)
from input
group by a;