SQL の効率的なフィルタリング: 各一意の識別子の最小値の行を取得します
データベース管理では、一意の値とそれに対応する最小値を持つレコードを抽出する必要があることがよくあります。一意の識別子の列と関連する値の列を含むテーブルがあり、目標は各一意の識別子から最小値に対応する行を取得することであるとします。
チャレンジ
次の形式を考えてみましょう:
id | game | point |
---|---|---|
1 | x | 5 |
1 | z | 4 |
2 | y | 6 |
3 | x | 2 |
3 | y | 5 |
3 | z | 8 |
目標は、一意の game
値ごとに最小の point
値を持つ行を見つけることです。期待される出力は次のとおりです:
id | game | point |
---|---|---|
1 | z | 4 |
2 | y | 6 |
3 | x | 2 |
解決策
これは、次の SQL クエリを使用して実現できます:
<code class="language-sql">SELECT tbl.* FROM TableName tbl INNER JOIN ( SELECT Id, MIN(Point) AS MinPoint FROM TableName GROUP BY Id ) tbl1 ON tbl1.id = tbl.id WHERE tbl1.MinPoint = tbl.Point;</code>
説明
Id
の最小 Point
値を計算し、結果を派生テーブル tbl1
に保存します。 Id
列に基づいて、元のテーブル TableName
を tbl1
と結合します。 Point
値 (tbl1
から) が元のテーブルの Point
値と一致する行のみを含めます。 このクエリを使用すると、game
列でグループ化された最小の Point
値を持つ一意の行を効率的に取得できます。
以上がSQLで各一意の識別子の最小値を持つ行を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。