所以我有两个表,一个是客户,另一个是订单。 customer表有一个region字段。客户可以有多个订单或没有订单。
我试过了:
SELECT customer.region, count(*)
FROM customer
LEFT JOIN order ON order.cid = customer.id
GROUP BY customer.region
ORDER BY count(*) DESC
不幸的是,如果客户没有订单,它就不会排除客户,如果客户有多个订单,也会多次计算客户。
答案 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