2016-03-27 15 views
-1

私は、(その範囲にするために)Railsの中に次のSQLを生成するための方法を探しています:ネストされたSQL SELECTは4

SELECT *, cs.count 
FROM articles, (
    SELECT article_id, count(*) 
    FROM comments 
    GROUP BY comments.article_id 
) cs 
WHERE articles.id = cs.article_id 
ORDER BY cs.count DESC; 

私はArticle.joins(:comments).select('*').group('comments.article_id')の線に沿って何かをしようとしたが、それは必要なSQLを生成しません:

SELECT * FROM "articles" 
INNER JOIN "comments" ON "comments"."article_id" = "articles"."id" 
GROUP BY comments.article_id 

(PSQL): PG::GroupingError: ERROR: column "articles.id" 
     must appear in the GROUP BY clause or be used in 
     an aggregate function 

を私はネストされたSQL SELECTを指定することがあった.from方法があるように表示されません。 。

答えて

1

実は、.from methodがあります:

scope :most_comments, -> { 
    Article.select('*, cs.count').from(
    'articles, (
     SELECT article_id, count(*) 
     FROM comments 
     GROUP BY comments.article_id 
    ) cs' 
    ) 
    .where('articles.id = cs.article_id') 
    .order('cs.count DESC') 
} 

これが最善の方法であるかどうかわからないが、それは動作します...