【发布时间】:2014-10-12 14:43:50
【问题描述】:
假设有两个表:
select * from users;
+-------+------+
| login | type |
+-------+------+
| test1 | A |
| test2 | A |
| test3 | B |
+-------+------+
和
select * from money;
+-------+--------+------------+
| login | amount | date |
+-------+--------+------------+
| test1 | 10.00 | 1325379661 |
| test1 | 20.00 | 1357002061 |
| test2 | 33.30 | 1388538061 |
+-------+--------+------------+
我需要从用户表中选择登录和类型字段,并从所选日期范围内的第二个表中选择金额字段的 SUM。如果所选期间的 sum 为空或“money”表中没有任何登录记录,则返回零值(非空集)。
我的做法如下:
SELECT u.login,u.type, SUM(m.amount) as amount
FROM users AS u
LEFT JOIN money AS m ON m.login=u.login
WHERE date>1388710861 GROUP BY u.login;
此查询合理地返回空集,但我需要获取用户列表和他们的零数量:
+-------+------+--------+
| login | type | amount |
+-------+------+--------+
| test1 | A | 0.00 |
| test2 | A | 0.00 |
| test3 | B | 0.00 |
+-------+------+--------+
这怎么可能?
【问题讨论】:
-
我想要得到的结果已经发布了。请看一看。
-
我已经尝试过 COALESCE。不走运,返回相同的空集。我的情况因使用多个连接而变得复杂,我想正确的方法在于改变表的连接方式。我已经尝试了多种变体,甚至是子查询,但得到了相同的结果。另外,我已经搜索过类似的案例Stackoverflow,但没有找到。