SQL でグループごとに最大のレコードを検索
データベース管理では、多くの場合、各データ グループ内の最大のレコードを取得する必要があります。次のシナリオを考えてみましょう。
質問:
「Name」、「Top」、「Total」という 3 つのフィールドと次のデータを含むテーブルがあります。
Name | Top | Total |
---|---|---|
cat | 1 | 10 |
dog | 2 | 7 |
cat | 3 | 20 |
horse | 4 | 4 |
cat | 5 | 10 |
dog | 6 | 9 |
あなたのタスクは、一意の「名前」値ごとに「合計」値が最大のレコードを見つけることです。望ましい結果は次のようになります:
Name | Top | Total |
---|---|---|
cat | 3 | 20 |
horse | 4 | 4 |
dog | 6 | 9 |
解決策:
グループごとの最大レコードを取得するには、次のクエリを使用できます:
<code class="language-sql">select Name, Top, Total from sometable where Total = (select max(Total) from sometable i where i.Name = sometable.Name)</code>
このクエリは、各レコードの「合計」値を、同じ「名前」グループ内の最大の「合計」値と比較します。次に、「合計」値が一致するレコードを選択します。
また、サブクエリを使用して同じ結果を得ることができます。
<code class="language-sql">select Name, Top, Total from sometable inner join ( select max(Total) as Total, Name from sometable group by Name ) as max on max.Name = sometable.Name and max.Total = sometable.Total</code>
このクエリは、最初にサブクエリを使用して、一意の各「名前」の最大「合計」値を計算します。次に、メイン クエリはテーブルをサブクエリと結合して、最大 "合計" 値が一致するレコードのみを選択します。
以上がSQLで各グループの最大レコードを見つける方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。