我有一个名为 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/