2014-05-03 19 views
0

我有一張名爲bets的表。我想根據多列的不同值返回記錄,然後在該記錄集上執行聚合查詢。此查詢不工作,當然,但應該說明我想要做的事:Rails - 在基於多列的不同記錄上運行聚合查詢

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

我確定還有其他方法,但我會用公共表格表達式來解決這個問題。您可以手動編寫SQL或查看postgres_ext gem:https://github.com/dockyard/postgres_ext/blob/master/docs/querying.md

+0

Thx用於鏈接。我寧願避免添加另一個gem,除非沒有令人滿意的sql等價物。 – keruilin

+1

在普通SQL中執行起來很簡單。該鏈接顯示了您需要的原始SQL示例。 –

+0

我剛剛注意到我寫了上面的評論後生成的純sql。會給它一個鏡頭! – keruilin