Rails - 基于多个列对不同记录运行聚合查询

时间:2014-05-03 02:24:37

标签: sql ruby-on-rails postgresql unique aggregate-functions

我有一张名为bets的表。我想根据多列的不同值返回记录,然后对该记录集执行聚合查询。当然,这个查询并不起作用,但应说明我尝试做的事情:

Bet.select('distinct user_id, event_id, bet_line_id, state, pick').
select("user_id, COUNT(CASE WHEN state = 'won' then 1 ELSE null END) 
AS bets_won, COUNT(CASE WHEN state = 'lost' then 1 ELSE null END) 
AS bets_lost, COUNT(CASE WHEN state = 'pushed' then 1 ELSE null END) 
AS bets_pushed").group('user_id')

如果我不清楚我在问什么,我会提供一个更具说明性的例子。

使用Rails 3.2和postgres,顺便说一句。

1 个答案:

答案 0 :(得分:1)

我确信还有其他方法,但我会用Common Table Expression解决这个问题。您可以手动编写SQL或查看postgres_ext gem:https://github.com/dockyard/postgres_ext/blob/master/docs/querying.md