2016-01-07 35 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)