我有两张数据库表一张customer包含用户ID—和订单ID这两个字段是一对多的关系。一张表order包含订单ID和支付方式。SQL查询有多少用户同时使用了支付方式1和2
可以使用子查询和聚合函数COUNT()来实现该查询:
SELECT COUNT(*) AS num_users FROM ( SELECT customer.user_id FROM customer INNER JOIN order ON customer.order_id = order.order_id WHERE order.payment_method IN ('1', '2') GROUP BY customer.user_id HAVING COUNT(DISTINCT order.payment_method) = 2 ) AS temp;
解释一下上面的SQL查询语句:
- 首先,通过INNER JOIN将customer表和order表连接起来,以便查询用户和订单的支付方式。
- 然后,使用WHERE子句过滤出支付方式为“1”或“2”的订单。
- 接下来,使用GROUP BY子句将结果按用户ID分组。
- 然后,使用HAVING子句筛选出同时使用了支付方式“1”和“2”的用户。
- 最后,使用COUNT()函数统计符合条件的用户数量,并将结果命名为num_users。
注意,上面的查询中使用了子查询,因为需要先对用户ID进行分组,再统计数量。同时,也需要使用DISTINCT关键字去重,以确保每个用户只被计算一次。
原文地址: https://www.cveoy.top/t/topic/bFAo 著作权归作者所有。请勿转载和采集!