

### 現状・実現したいこと

標記の件について質問させていただきます。  
【実現したいこと】

  1. competition_idが同じ番号のものをまとめる
  2. そのcompetition_idでグルーピングされたもののなかで、各pointsカラムが最高値のもののレコードを取得

(各competitionの1位を取得したい)

【現状】  
現在、DBにはitemsテーブルとcompetitionsテーブルがあります。  
カラムや格納されているデータについては以下の通りです。  
[![画像の説明をここに入力](https://i.stack.imgur.com/k6RfT.png)](https://i.stack.imgur.com/k6RfT.png)  
[![画像の説明をここに入力](https://i.stack.imgur.com/AzrPU.png)](https://i.stack.imgur.com/AzrPU.png)

○itemsテーブルには、そのitemが持つpointsがある。  
○itemsテーブルには、どのcompetitionに属しているかを指定するcompetiton_idが存在している。

### 試したこと

[code]

    Item.maximum("points")
    最大値が出力されただけで、レコードの出力をしたい
    
[/code]

[code]

    Item.order("points DESC")
    グルーピングされていなく、pointsの降順で取得された
    
[/code]

[code]

    Item.order("points DESC").group(:competition_id) 
    pointsの最高値のレコード（希望している結果）ではなく、competition_idの初めのレコードを取得された
    
[/code]

いろいろと試行錯誤してみましたが、希望通りの抽出ができません。  
上記のレコードを抽出するActiveRecordをご教授いただければ幸いです。

### 補足情報（FW/ツールのバージョンなど）

  * ruby 2.7.0p0
  * Rails 6.1.0
  * sqlite


CC BY-SA 4.0
2021-01-02T07:43:25.570
73025
2021-01-02T10:13:56.107
2021-01-02T10:13:56.107
19110
43382
question
ruby-on-rails rails-activerecord
ActiveRecordで指定のレコードを抽出する方法


下記の通り、自己解決しました

[code]

    query = "SELECT *,MAX(points) FROM Items GROUP BY competition_id"
    
    @winners = Item.find_by_sql(query)
    
[/code]


CC BY-SA 4.0
2021-01-02T09:46:43.667
73026
2021-01-02T09:46:43.667
43382
73025
answer