SQL クエリで最小値を持つ一意の行を選択するにはどうすればよいですか?
データベースでは、多くの場合、特定の列の最小値を含むレコードを抽出する必要があります。テーブルに「id」、「game」、「point」列が含まれているとします。 (「ゲーム」でグループ化された) 最小の「ポイント」値を持つ行のみを選択するには、次の有効な SQL クエリを使用できます:
<code class="language-sql">SELECT tbl.* FROM TableName tbl INNER JOIN ( SELECT Id, MIN(Point) MinPoint FROM TableName GROUP BY Id ) tbl1 ON tbl1.id = tbl.id WHERE tbl1.MinPoint = tbl.Point</code>
このクエリは、一意の「id」ごとに最小の「point」値を持つ行のみが選択されることを保証します。括弧内のサブクエリは、各「id」の最小「point」値を計算し、それを一時列「MinPoint」に保存します。次に、メイン クエリは、共通列 'id' に基づいて元のテーブル ('TableName') をこの一時テーブルと結合します。
条件 'tbl1.MinPoint = tbl.Point' をフィルター処理することにより、クエリは、'point' 値が各 'id' グループ内の最小値と一致する行のみが返されるようにします。これにより、目的の出力が生成され、「ゲーム」ごとに最小の「ポイント」値を持つ一意の行が選択されます。
例:
次の形式を考えてみましょう:
id | game | point |
---|---|---|
1 | x | 5 |
1 | z | 4 |
2 | y | 6 |
3 | x | 2 |
3 | y | 5 |
3 | z | 8 |
このテーブルに対して上記のクエリを実行すると、次の出力が生成されます:
id | game | point |
---|---|---|
1 | z | 4 |
2 | y | 6 |
3 | x | 2 |
ご覧のとおり、クエリは各「ゲーム」の最小の「ポイント」値を持つ一意の行を正しく識別します。
注: 元のサンプル データと結果の間には矛盾があります。結果テーブルは SQL ステートメントの結果と一致するように修正されています。 修正された結果の表には、各 id
の最小の point
値を持つ行が表示されます。 game
グループ化によって最小の point
値を選択する必要がある場合は、SQL ステートメントを変更する必要があります。
以上がSQL で最小値を持つ一意の行を選択するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。