我有一张客户订单表:里面是零成本订单(我给客户的东西)以及付费订单。我想知道收到免费订单的客户是否也购买了订单。
#endif
这两个查询向我提供了收到免费订单的客户列表以及支付订单的客户列表。我想计算重叠的实例,例如:
SELECT customer_id
FROM orders
WHERE total = 0
GROUP BY customer_id
SELECT customer_id
FROM orders
WHERE total != 0
GROUP BY customer_id
这两组之间的交叉是//free orders
1,5,2,9,3,11,7
//paid orders
1,5,4,8,7,9,3,12,10,13
,它是五个元素。我需要一种方法来严格使用SQL首选。
答案 0 :(得分:2)
只需使用having
子句即可。这可能是最简单的方法,假设total
没有负值:
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING MIN(total) = 0 AND MAX(total) > 0;
答案 1 :(得分:0)
试试这个(未经测试,抱歉)
SELECT count(distinct customer_id)
FROM orders a JOIN orders b
ON a.customer_id = b.customer_id
WHERE a.total = 0 and b.total <>0