我的数据库中有以下关系,
id | month | balance |
-----------+------------+---------+
0009gmail | 2016-01-01 | 2000 |
0009gmail | 2016-02-01 | 3500 |
0009gmail | 2016-03-01 | 800 |
0009gmail | 2016-04-01 | 1400 |
0009gmail | 2016-05-01 | -500 |
问题是,我希望日期小于指定日期的不同身份的余额,
我正在使用此查询:
select distinct(id),sum(balance) from payment group by id,month having month<'2016-06-22';
但是它给出了这个结果,
id | sum
-------------+---------
0009gmail | 2000
0009gmail | 800
0009gmail | 1400
0009gmail | 3500
0009gmail | -500
我想我得到这个结果是因为在group by子句中放了一个月,但是删除它会给出一个错误,那个月必须在聚合函数的任一组中,我想要这个输出,
id | sum
----------+---------
0009gmail | 7200
请帮助..
答案 0 :(得分:0)
使用id
的简单聚合:
SELECT id, SUM(balance) AS balance
FROM payment
WHERE month<'2016-06-22'
GROUP BY id;
的 LiveDemo
强>
payement
表格month<'2016-06-22'
GROUP BY
id HAVING
)不需要答案 1 :(得分:0)
您正在寻找where
条款:
select id, sum(balance)
from payment
where month < '2016-06-22'
group by id;
我发现混乱很有趣。大多数人试图将having
逻辑放在where
子句中(where
子句中不允许聚合函数)。从另一个方向看错误是非常罕见的。
另请注意,select distinct
几乎从不适合聚合查询。