-1

我在表中有四列稱爲記錄,比如score,event_id,user_id,我想根據用戶ID +事件ID 總結記錄的得分,然後我會喜歡顯示按Score排序的不同事件的用戶。根據不同的列對記錄組進行排序

所以我wriiten下面的代碼

Recording.select("user_id,event_id,sum(score) as score").group(:user_id,:event_id).order("score DESC") 

和上面的查詢輸出基於最高分的記錄,如下面

#<Recording user_id: 4, event_id: 51, score: 64622>, 
#<Recording user_id: 3, event_id: 51, score: 5912> 
#<Recording user_id: 4, event_id: 31, score: 62>, 
#<Recording user_id: 3, event_id: 48, score: 0> 

但我想重新太分鐘得分arrabge結果如下所示(不同事件的用戶按Score排序)

#<Recording user_id: 4, event_id: 51, score: 64622>, 
#<Recording user_id: 4, event_id: 31, score: 62>, 
#<Recording user_id: 3, event_id: 48, score: 0>, 
#<Recording user_id: 3, event_id: 51, score: 5912> 
+0

我有兩列編組的記錄,USER_ID和EVENT_ID – loganathan 2013-05-06 21:01:26

+0

這個問題是非常不清楚。你的例子很難說明你的文本沒有描述什麼。榮譽@PinnyM似乎已經在更多的評論後發現了它。 – 2013-05-06 23:45:42

回答

1

對於PostgreSQL,喲ü可以使用窗口函數來做到這一點:

select_sql <<-SELECT 
    user_id, event_id, sum(score) as score, 
    ROW_NUMBER() OVER (PARTITION BY user_id, event_id ORDER BY sum(score) DESC) as rowNum 
SELECT 

subquery = Recording.select(select_sql).group(:user_id, :event_id).to_sql 

Recording.select("*").from(Arel.sql("(#{subquery}) t")). 
      order("rowNum, score DESC") 
+0

我不想根據event_id和score對記錄進行排序,我想根據每個事件的得分重新排列記錄。 贊好belwo – loganathan 2013-05-06 21:03:15

+0

你認爲不是從高到低得分(64622,5912,62,52)?你想用什麼其他邏輯來訂購分數? – PinnyM 2013-05-06 21:07:19

+0

我想按每個事件的最高分將記錄重新整理到最低分,而不僅僅是分數。如果我們有三個事件,那麼輸出必須像前3個記錄必須具有每個事件的前3個最大值,並且後3個記錄必須具有每個事件的後3個最大分數。 – loganathan 2013-05-06 21:11:58

相關問題