2016-01-07 99 views
1

分組在一起我有一個表,這個結構:的Rails + PostgreSQL的:用總和

id | name  | batch_id | used 
---------------------------------- 
1 | voucher 1 | 1  | 1 
2 | voucher 2 | 1  | 0 
3 | voucher 3 | 1  | 1 
4 | voucher 4 | 2  | 0 
5 | voucher 5 | 3  | 1 

,我需要運行一個查詢,將通過BATCH_ID和組辦所使用的列的總和。

所以我需要的結果是:

batch_id | sum_used 
---------------------------------- 
1  | 2 
2  | 0 
3  | 1 

這是我到目前爲止有:

TableName.select('DISTINCT ON (batch_id) batch_id') 

這是一樣的:

SELECT DISTINCT ON (batch_id) batch_id FROM table_name 

分組工作,但我無法拿到這筆錢。

任何人都可以指向正確的方向嗎?

回答

0

您需要使用GROUP BYSUM聚合函數:

SELECT batch_id, SUM(used::int) AS sum_used 
FROM table_name 
GROUP BY batch_id 
ORDER BY batch_id; 

SqlFiddleDemo

輸出:

╔═══════════╦══════════╗ 
║ batch_id ║ sum_used ║ 
╠═══════════╬══════════╣ 
║  1 ║  2 ║ 
║  2 ║  0 ║ 
║  3 ║  1 ║ 
╚═══════════╩══════════╝ 

或者使用窗口函數:

SELECT DISTINCT batch_id, SUM(used::int) OVER(PARTITION BY batch_id) AS sum_used 
FROM table_name 
ORDER BY batch_id 

SqlFiddleDemo2

0

嘿,你可以試試這個方法:

TableName.select('batch_id as batch_id , sum(used) as sum_used').group(:batch_id)