查询有多少客户下了订单
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
所以我有两个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