2012-01-29 1 views
2

別のクエリからいくつかのデータを選択しようとしています。 SQLは次のようになります。レール上のテーブルとしてサブクエリを使用する3.1

SELECT user_id, rank FROM 
(SELECT user_id, MAX(created_at) as latest_solution, COUNT(*) AS solved, 
rank() OVER (ORDER by COUNT(*) desc) AS rank FROM submissions group by user_id) 
as leaderboard WHERE leaderboard.user_id = xx 

が、私はActiveRecordの言語にこれを翻訳しようとしてトラブルを抱えている私は、サブクエリ

Submission.select('user_id, MAX(created_at) as latest_solution, COUNT(*) as solved, rank() OVER (ORDER BY count(*) desc) as rank').group('user_id') 

が、私でOKだと思う

これを「テーブル」として使用する方法を知らない

答えて

5

私はまったく重要でないものはfind_by_sqlに直接行きます:

Submission.find_by_sql(%q{ 
    select user_id, 
      rank 
    from (
     select user_id, 
       max(created_at) as latest_solution, 
       count(*) AS solved, 
       rank() over (order by count(*) desc) as rank 
     from submissions 
     group by user_id 
    ) as leaderboard 
    where leaderboard.user_id = :user_id 
}, :user_id => 'xx') 

Submissionのクラスメソッドでラップすると大丈夫です。

関連する問題