我可能会做这样的事情:
select
max(val), max(val2), max(val3) from table
group by
val4;
获取此示例输出:
Table
val1 val2 val3 val4
A P Z 1
P Z P 1
对于我的用例,我们假设“P”是一个重要值,因此如果按 val4 分组时 P 出现在某处,那么这就是我想要显示的值。也就是说,在这种情况下,当按 val4 分组时,我想为 val1、val2、val3 表面显示 ('P','P','P')。
这可以或应该如何完成?
最佳答案
我只会使用条件聚合。例如:
select coalesce(max(case when val1 = 'P' then val end), max(val1)) as val1,
coalesce(max(case when val2 = 'P' then val end), max(val2)) as val2,
coalesce(max(case when val3 = 'P' then val end), max(val3)) as val3
from table
group by val4;
如果任何值与 'P'
匹配,则每个 coalesce()
中的第一个表达式将返回 'P'
。如果不是,则返回最大值。
关于sql - Oracle SQL - 当使用分析函数组合多行时, 'prefer' 某些值高于其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34889705/