Rails + PostgreSQL:用总和分组

Rails + PostgreSQL: grouping together with a sum

我有一个 table 这种结构:

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

分组有效,但总和无效。

谁能指出我正确的方向?

您需要使用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

嘿,你可以这样试试:

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