2016-01-21 38 views
0

我已經按照我的數據庫關係的值的總和,PostgreSQL的:獲得類似的IDS明顯

 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 | 

問題是,我想不同的ID的餘額總和具有日比指定日期少,

我使用這個查詢這樣的:

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

你正在尋找一個where條款:

select id, sum(balance) 
from payment 
where month < '2016-06-22' 
group by id; 

我找到了混亂有趣。大多數人試圖在where子句中使用having邏輯(在where子句中不允許使用聚合函數)。在另一個方向看到錯誤是非常罕見的。

另請注意,select distinct在聚合查詢中幾乎不適用。

+0

如果還有另外一個ID爲0009hotmail的條目......? –

+0

因此,group by是將所有的個人ID分組的,對嗎? –

+0

'group by'爲'group by'子句中的每個鍵的組合產生一個單獨的行,並在'select'中計算出總結。 –