mysql 如何根据其他列值更新sql中的列值

u3r8eeie  于 2023-04-28  发布在  Mysql
关注(0)|答案(2)|浏览(206)

我有如下数据
| 金额|通货|投资者关系|
| --------------|--------------|--------------|
| 二百五十|美元|科伊维斯特岛|
| 0|英镑|科伊维斯特岛|
| 八六零|美元|平行|
| 0|英镑|平行|
| 一百二十一|美元|PSLO|
| 五|零|PSLO|
我需要输出如下
| 金额|通货|投资者关系|
| --------------|--------------|--------------|
| 二百五十|英镑|科伊维斯特岛|
| 八六零|英镑|平行|
| 一百二十六|美元|PSLO|
即方案-我想俱乐部/组的投资者和总金额和货币领域应该是当其美元或空它应该是美元或当其英镑或美元它应该显示英镑。
查询不起作用:

select sum(Amount)  
case when currency in ('USD' , NULL ) then 'USD'
else currency end as c1, Investors
from table 
group by c1 , Investors;

尝试:

select sum(Amount)  
case when currency in ('USD' , NULL ) then 'USD'
else currency end as c1, Investors
from table 
group by c1 , Investors;
1cosmwyk

1cosmwyk1#

在这种情况下,你可以使用sum来表示金额,min来表示货币。

select sum(Amount) amount,
    min(currency),
    Investors
from table 
group by Investors

演示here

ac1kyiln

ac1kyiln2#

您可以使用row_number()来进行优先级排序:

select amount, currency, investors
from (
    select t.*,
        row_number() over(
            partition by investors
            order by case currency
                when 'GBP' then 1
                when 'USD' then 2
                else 3
            end
        ) rn
    from mytable
) t
where rn = 1

当一个投资者有多行数据时,首先是“英镑”,然后是“美元”,然后是其他值(这里是null)。您可以轻松地调整case表达式,以考虑更多货币或不同的优先级顺序。

相关问题