【问题标题】:Query to find how many customers have made an order查询有多少客户下了订单
【发布时间】:2015-03-19 20:17:10
【问题描述】:

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

我试过这个:

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

不幸的是,这并没有排除没有订单的客户,而且如果客户有多个订单,也会多次计算客户。

【问题讨论】:

  • 所以您想查找每个地区或每个客户的每个客户以及订单数量?并且还提供表结构?
  • 我想看看每个地区有多少客户订购了东西。

标签: mysql sql join group-by


【解决方案1】:

你有没有尝试过类似的东西

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。

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

【讨论】:

  • 哦,这可能行得通。坚持,稍等。编辑:这是完美的。谢谢!当它允许我时,我会在 5m 内接受它>.>
  • 大声抱歉,我被赶上了。
【解决方案2】:

如果您还想查看订单数为 0 的区域(订单最多的区域位于顶部),请使用 LEFT JOIN:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-22
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多