SQL を使用して各グループの最年長者を効率的に特定する
データベース クエリでは、多くの場合、特定のグループ内の最大値を見つける必要があります。 この例では、person
、group
、age
列を含むテーブルから各グループの最高齢者を特定する方法を示します。
解決策:
このアプローチでは、 を利用してグループ内の各人の年齢を比較します。 一致しない行は、そのグループ内の最年長の人を表します。LEFT JOIN
実装:
<code class="language-sql">SELECT o.* FROM Persons o LEFT JOIN Persons b ON o.Group = b.Group AND o.Age < b.Age WHERE b.Age IS NULL;</code>
説明:
Persons o
テーブルには、Persons
(「最も古い」を表す) というエイリアスが付けられます。o
LEFT JOIN Persons b
は、LEFT JOIN
(「より大きな時代」を表す) としてエイリアスされた Persons
テーブルで実行されます。 これにより、b
の各行が、同じグループ (o
) 内の古い行 (o.Group = b.Group
) と結合されます。
o.Age < b.Age
WHERE b.Age IS NULL
内に一致しない場合 (つまり、o
が NULL である)、そのグループ内に年上の人がいないことを意味します。 したがって、各グループの最年長者のみが選択されます。b
b.Age
INNER JOIN
この方法は、このタイプのクエリに対して非常に効率的で広く推奨される手法です。 同様のアプローチについては、「SQL アンチパターン 第 1 巻: データベース プログラミングの落とし穴の回避」で説明されています。以上がSQL を使用して各グループの最年長者を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。