所以我有两个表,一个是客户,另一个是订单。 客户表有一个区域字段。客户可以有多个订单或没有订单。
我尝试过这个:
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
连接仅返回已下订单的客户,而 DISTINCT
只会返回一次 customer.id,因此,如果客户已下多个订单,则此连接将仅返回一次 customer.id。只会带回他们的 customer.id 一次。
正如 Michael Y 所说,如果您想带回所有区域,无论它们是否有任何匹配的订单,请将 INNER
替换为 LEFT
关于mysql - 查询有多少客户下订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29154173/