SQL根据其他列中的最小值获取值

时间:2020-07-31 12:10:53

标签: sql

我在SQL中有一个要求,我需要根据另一列中的最小值得出该值。

在此示例中,我们可以看到最低金额为4,900,000.00,而此金额的原始货币为GBP。因此,仅此行的LowestCurrency的值应设置为GBP。然后将其他行设置为UNK。

是否有任何窗口函数可以帮助实现这一目标?我尝试了FIRST_VALUE,但无法将其他“非合格”行设置为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
)

2 个答案:

答案 0 :(得分:0)

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

<Link to={`/${variable}`}>
            <your code>
</Link>

如果可以为最低价设置平局,则可以使用select t.*, (case when row_number() over (partition by reference order by amount) = 1 then OriginalCurrency else 'UNK' end) as LowestCurrency from t; 代替rank()

答案 1 :(得分:0)

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