mysql - 左外连接 + SUM 与 group by

标签 mysql sql select join

我有一个名为 Purchases 的表,它属于一个 Users(即一个 Purchase 有一个指向 User 的外键)。

Purchases 表有一个名为 quantity 的列和一个 state_id 列,都是整数。

我希望能够通过用户完成的购买 (state_id = 10) 来订购用户,其中他们的数量之和大于 100。也就是说,所有用户的总购买量已完成购买的数量 > 100,应该首先出现,其余的紧随其后。

这是我试过的:

SELECT users.id as user_id, 
       SUM(CASE WHEN purchases.state_id = 5 
                THEN purchases.quantity
                ELSE 0 
           END) as quantity
FROM users
LEFT OUTER JOIN purchases ON purchases.user_id = users.id
GROUP BY purchases.user_id

但这只是返回给我一个用户,而不是所有用户。我错过了什么?

最佳答案

您只能使用 JOIN 条件加入已完成的购买。并且您应该按 users.id 而不是 purchases.user_id 分组,因为您可以在表中包含根本没有购买的用户:

SELECT users.id as user_id, 
       SUM(purchases.quantity) as quantity
FROM users
LEFT JOIN purchases ON (users.id=purchases.user_id) 
                       AND (purchases.state_id = 10)
GROUP BY users.id
ORDER BY quantity DESC

关于mysql - 左外连接 + SUM 与 group by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32720338/

相关文章:

mysql - 来自同一个表的复杂 MySQL Sum

Mysql 更新之前首先检查是否有必要或只是更新?

Excel VBA - 如何选择特定工作表中的列?

mysql - mysql 中的派生表显示错误

mysql - 使用 count() 连接的 Sql 查询以及表的位置

mysql - 联合数据库中的列

reactjs - 带有图标的 Material ui自动完成

MySQL - group_concat 拉入额外的错误数据

php - 可以 * 替换 mysql WHERE 中的值

java - 如果没有主机模式,从 docker 到 localhost 的 mysql 的 jdbc url 无法工作