查询有多少客户下了订单

Query to find how many customers have made an order

所以我有两个table,一个是客户,另一个是订单。 客户 table 有一个区域字段。客户可以有多个订单或没有订单。

我试过这个:

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

遗憾的是,这不会排除 没有订单的客户,如果有多个订单,也会多次计算客户。

你有没有试过

SELECT region, count(DISTINCT customer.id) 
FROM customer 
INNER JOIN order ON order.cid = customer.id 
GROUP BY region 

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

正如 Michael Y 所说,如果您想恢复所有区域,无论它们是否有任何匹配订单,请将 INNER 替换为 LEFT

如果您还想查看订单为 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