mysql - 具有多条记录的案例

标签 mysql sql case

我有一个如下所示的数据集:

id No_trans Bank
1   2       VISA
1   1       PAYPAL
2   3       MASTERCARD
3   1       MASTERCARD
3   4       PAYPAL
4   1       PAYPAL

我需要做的是,如果idPAYPAL,例如将其更改为另一家银行。 对于 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/

相关文章:

mysql - MariaDB 10.4.10 错误 1146 (42S02) : Table 'mysql.user' doesn't exist

sql - 当在很多地方使用 GETDATE() 时,使用变量是不是更好?

sql - 使用一个 SQL 语句的结果在另一语句中进行计数

java - 从 2 个变量的映射中获取结果

python - 在 Django 中动态创建热门文章列表?

mysql - 如何使用 IntelliJ 正确设置 Spring Boot 和 Hibernate?

android - JSON 解析数据未显示在 ListFragment 中

sql - 如何将临时表作为参数传递到单独的存储过程中

mysql - 使用案例创建一个新的列 MySQL

MySQL select语句与CASE或IF ELSEIF?不知道如何得到结果