我有两张数据库表一张包含用户ID和订单ID这两个字段是一对多的关系。一张包含订单ID和支付方式这两个字段是一对一的关系。要怎么用SQL查询有多少用户同时使用了支付方式1和2
可以使用子查询和GROUP BY语句来实现:
SELECT COUNT(*) AS user_count
FROM (
SELECT user_id
FROM user_order
WHERE order_id IN (
SELECT order_id
FROM order_payment
WHERE payment_method IN ('1', '2')
GROUP BY order_id
HAVING COUNT(DISTINCT payment_method) = 2
)
GROUP BY user_id
HAVING COUNT(DISTINCT order_id) >= 2
) AS users;
解释一下查询的过程:
- 子查询中,先找出支付方式为1或2的订单ID,并且这些订单ID同时含有支付方式1和2,即这些订单同时使用了支付方式1和2。
- 根据这些订单ID,再找出对应的用户ID。
- 对用户ID进行分组,并统计每个用户使用的订单数量。
- 最后筛选出使用了至少两个订单的用户,并统计符合条件的用户数量。
注意,这里使用了DISTINCT关键字,避免重复计算订单或支付方式。
原文地址: https://www.cveoy.top/t/topic/bFjr 著作权归作者所有。请勿转载和采集!