查询以查找有多少客户订单

时间:2015-03-19 20:17:10

标签: mysql sql join group-by

所以我有两个表,一个是客户,另一个是订单。 customer表有一个region字段。客户可以有多个订单或没有订单。

我试过了:

SELECT customer.region, count(*) 
  FROM customer 
  LEFT JOIN order ON order.cid = customer.id 
 GROUP BY customer.region 
 ORDER BY count(*) DESC

不幸的是,如果客户没有订单,它就不会排除客户,如果客户有多个订单,也会多次计算客户。

2 个答案:

答案 0 :(得分:1)

你有没有试过像

这样的东西
SELECT region, count(DISTINCT customer.id) 
FROM customer 
INNER JOIN order ON order.cid = customer.id 
GROUP BY region 

基本上INNER加入仅返回已下订单的客户,而DISTINCT只会返回一个customer.id一次,如果客户已下了多个订单,这将带回他们的客户.id一次。

正如迈克尔Y正确地说如果你想要带回所有地区而不管他们是否有任何匹配的订单,那么用INNER替换LEFT

答案 1 :(得分:0)

LEFT JOIN如果你想看到0订单的区域(顶部订单最多的区域):

SELECT region, count(DISTINCT customer.id) 
FROM customer 
  LEFT OUTER JOIN order ON order.cid = customer.id 
GROUP BY region
ORDER BY 2 desc