MySQL如何查询多条支付记录中仅使用过一种支付类型的用户
需求说明
现有支付记录表,存储用户每笔支付选择的支付方式,表包含两个字段:
user_id:用户IDpayment_type:支付类型
需要查询所有支付生命周期内仅使用过同一种支付类型的用户。
提供的示例数据如下:
user_id payment_type 1 UPI 1 NB 2 UPI 2 UPI
示例预期仅返回user_id = 2的结果:该用户所有支付记录均使用UPI,符合要求;user_id = 1使用过UPI、NB两种支付类型,不符合筛选规则。
实现方案
核心逻辑:按用户ID分组聚合,统计每个用户关联的去重后支付类型数量,筛选数量恰好为1的用户即可。
假设存储支付记录的表名为payment_record,对应MySQL查询语句如下:
SELECT user_id FROM payment_record GROUP BY user_id HAVING COUNT(DISTINCT payment_type) = 1;
语句说明
GROUP BY user_id:将所有支付记录按用户维度划分聚合COUNT(DISTINCT payment_type):计算单个用户所有支付记录中,不重复的支付类型总数HAVING COUNT(DISTINCT payment_type) = 1:过滤出去重支付类型数为1的用户,即全程仅使用一种支付方式的目标用户
如果需要同时返回该用户唯一使用的支付类型,可以调整查询字段,因为分组后该用户所有记录的payment_type值一致,用聚合函数取值即可:
SELECT user_id, MAX(payment_type) AS used_payment_type FROM payment_record GROUP BY user_id HAVING COUNT(DISTINCT payment_type) = 1;
内容的提问来源于stack exchange,提问作者Ansh Agrawal
相关产品推荐
相关产品推荐

