sql根据其他列中的最低值获取值

cxfofazt  于 2021-07-27  发布在  Java
关注(0)|答案(2)|浏览(315)

我在sql中有一个需求,需要根据另一列中的最小值获取值。
在本例中,我们可以看到最低金额为4900000.00,其原币为英镑。因此,对于此行,最低货币的值应设置为gbp。然后将其他行设置为unk。
有没有窗口功能可以帮助实现这一点?我尝试了first\u值,但无法将其他“非限定”行设置为unk。
预期输出为:

OriginalCurrency    LowestCurrency  Reference        Amount
GBP                 GBP             2000001/001/18   4,900,000.00 
EUR                 UNK             2000001/001/18   7,500,000.00 
USD                 UNK             2000001/001/18   10,000,000.00 
GBP                 UNK             2000002/001/18   5,000,000.00 
EUR                 EUR             2000002/001/18   1,000,000.00 
USD                 UNK             2000002/001/18   9,000,000.00

代码示例如下:

select *
from (values 
     ('GBP','GBP','2000001/001/18',4900000)
    ,('EUR','UNK','2000001/001/18',7500000)
    ,('USD','UNK','2000001/001/18',10000000)
    ,('GBP','UNK','2000002/001/18',5000000) 
    ,('EUR','EUR','2000002/001/18',1000000)
    ,('USD','UNK','2000002/001/18',9000000)) t

(
OriginalCurrency,
LowestCurrency,
Reference,
Amount
)
njthzxwz

njthzxwz1#

可以使用条件逻辑。如果我理解正确:

select t.*,
       (case when row_number() over (partition by reference order by amount) = 1
             then OriginalCurrency
             else 'UNK'
        end) as LowestCurrency
from t;

如果最低值有关系,可以使用 rank() 而不是 row_number() .

voj3qocg

voj3qocg2#

select
 ...,
 case when amount = select min(amount) from t1 then OriginalCurrency
 else 'UNK' 
 end as OriginalCurrency
from t1

相关问题