微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

相同列的MYSQL基本条件聚合

如何解决相同列的MYSQL基本条件聚合

我有以下问题,但我不知道如何实现。

我需要根据两个条件+相同的属性进行过滤

获取事件为“paymentFailed”且事件不是“paymentSuccess”的用户

  • 基本上我需要为每个用户过滤所有“失败的付款”,但条件意味着同一用户不能存在支付成功。

  • 如果用户的 paymentSuccess 存在,则结果应该为空。

id  name    event             transaction_number    
2   John    paymentFailed         002   
3   John    paymentInProcess      003   
4   John    paymentStucked        004   
5   John    paymentSuccess        005   
6   Jane    paymentFailed         006   
7   Jane    paymentSuccess        007   
8   Reese   paymentFailed         008   
9   Reese   paymentFailed         009   
10  Reese   otherPayment          010   

类似这样的(当paymentSuccess不存在时)

SELECT * FROM USERS where event != "paymentSuccess" AND event = "paymentFailed"

结果:

id  name    event             transaction_number    
8   Reese   paymentFailed         008   

(paymentSuccess 存在时)

SELECT * FROM USERS where event = "paymentSuccess" AND event = "paymentFailed"

结果:

id  name    event             transaction_number    
------------------------ Empty table -----------------------

解决方法

使用NOT EXISTS

SELECT u1.* 
FROM USERS u1 
WHERE u1.event = 'paymentFailed'
  AND NOT EXISTS (SELECT 1 FROM USERS u2 WHERE u2.name = u1.name AND u2.event = 'paymentSuccess')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。