ホームページ > データベース > mysql チュートリアル > SQLで各グループの最年長者を見つけるにはどうすればよいですか?

SQLで各グループの最年長者を見つけるにはどうすればよいですか?

DDD
リリース: 2025-01-23 22:52:10
オリジナル
694 人が閲覧しました

How to Find the Oldest Person in Each Group in SQL?

グループ化された SQL データの上位レコードを効率的に取得する

この例では、関係を解決するためにアルファベット順を考慮して、SQL テーブル内の各グループ内の最年長者を特定する方法を示します。 テーブル構造には、「個人」、「グループ」、および「年齢」列が含まれています:

テーブルの例:

Person Group Age
Bob 1 32
Jill 1 34
Shawn 1 42
Jake 2 29
Paul 2 36
Laura 2 39

目的: 年齢が同じ場合はアルファベット順に優先して、各グループの最年長者を見つけます。

SQL ソリューション:

<code class="language-sql">SELECT o.*
FROM Persons o
LEFT JOIN Persons b ON o.Group = b.Group AND (o.Age < b.Age OR (o.Age = b.Age AND o.Person > b.Person))
WHERE b.Person IS NULL;</code>
ログイン後にコピー

説明:

このクエリは、LEFT JOIN を使用して、各個人 (o) を同じグループ内の他のすべての個人 (b) と比較します。 ON 句は、次のいずれかの行をフィルタリングします。

  1. o.Age < b.Age: ob よりも若いです (つまり、o が最年長ではありません)。
  2. o.Age = b.Age AND o.Person > b.Person: ob と同じ年齢ですが、アルファベット順では後になります (つまり、o はアルファベット順で最も古いわけではありません)。

WHERE b.Person IS NULL 句は、o で一致した行を b から除外し、各グループの最年長者 (同数の場合はアルファベット順で最初) のみを残します。

さらなる探索:

高度な SQL テクニックと潜在的な落とし穴についてより包括的に理解するには、「SQL アンチパターン 第 1 巻: データベース プログラミングの落とし穴の回避」などのリソースを参照してください。

以上がSQLで各グループの最年長者を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート