mysql - 查询有多少客户下订单

标签 mysql sql join group-by

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

我尝试过这个:

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/

相关文章:

mysql - 将数据按百分位数范围进行分区,并为不同的范围分配不同的值

sql - 在 SQL 中使用破折号 (-) 和空格分隔的搜索值的简便方法

MySQL在删除时设置默认字段值

sql - 简单的 SQL 查询..无法解决

MySQL嵌套连接

mysql - 使用正则表达式和子选择查询太慢

java - 如何使用 Java 和 JDBC 将文本文件存储在 h2 数据库中?

mysql - 选择所有 child 都满足条件的 self 关系中的行

mysql - MongoDB 和 SQL 插入、更新或删除哪个更快?

mysql - 如何计算MySQL中的相似兴趣