この例では、関係を解決するためにアルファベット順を考慮して、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
句は、次のいずれかの行をフィルタリングします。
o.Age < b.Age
: o
は b
よりも若いです (つまり、o
が最年長ではありません)。o.Age = b.Age AND o.Person > b.Person
: o
は b
と同じ年齢ですが、アルファベット順では後になります (つまり、o
はアルファベット順で最も古いわけではありません)。WHERE b.Person IS NULL
句は、o
で一致した行を b
から除外し、各グループの最年長者 (同数の場合はアルファベット順で最初) のみを残します。
さらなる探索:
高度な SQL テクニックと潜在的な落とし穴についてより包括的に理解するには、「SQL アンチパターン 第 1 巻: データベース プログラミングの落とし穴の回避」などのリソースを参照してください。
以上がSQLで各グループの最年長者を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。