我有一个如下所示的数据集:
id No_trans Bank
1 2 VISA
1 1 PAYPAL
2 3 MASTERCARD
3 1 MASTERCARD
3 4 PAYPAL
4 1 PAYPAL
我需要做的是,如果id
有PAYPAL
,例如将其更改为另一家银行。
对于 id
= 1,PAYPAL
应为 VISA
,但对于 id
= 3,应为 MASTERCARD
,但是,对于id
= 4,它应该是PAYPAL
,因为它没有其他银行
记录。
select id ,count(No_trans) ,
case Bank when PAYPAL then VISA
when PAYPAL then MASTERCARD
else
PAYPAL
end as bank
from table
按 1 和 3 分组
不起作用,因为我需要根据具有相同 id
银行的其他记录来更改它。
如果此 ID 的银行与 PAYPAL
不同,则将其用于具有相同 ID 的其他记录,如果没有,则按原样使用。
create temporary table t1
(
ID INT
, no_trans int
, bank varchar (255)
);
INSERT INTO t1 values
(1, 2 , 'VISA'),
(1 , 1 , 'PAYPAL'),
(2, 3 , 'MASTERCARD'),
(3 , 1 , 'MASTERCARD'),
(3, 4 , 'PAYPAL'),
(4 , 1 , 'PAYPAL');
select * from t1
where id = 1
返回
'1','2','VISA'
'1','1','PAYPAL'
我需要
'1','2','VISA'
'1','1','VISA'
对于
从 t1 中选择 * 其中 ID = 3 应该是
ID, no_trans, bank
3, 1, MASTERCARD
3, 4, MASTERCARD
对于
从 t1 中选择 * 其中 id = 4
ID, no_trans, bank
4, 1, PAYPAL
最佳答案
您可以使用聚合:
select id,
coalesce(max(case when Bank <> 'PayPal' then Bank end),
max(Bank)
)
from t
group by id;
如果您想要原始行,那么子查询可能更简单:
select t.*,
(select t2.bank
from t t2
where t2.id = t.id
order by (t2.bank <> 'PayPal) desc
limit 1
) as new_bank
from t;
关于mysql - 具有多条记录的案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51093915/