Contoh ini menunjukkan cara mengenal pasti orang tertua dalam setiap kumpulan dalam jadual SQL, dengan mengambil kira susunan abjad untuk menyelesaikan hubungan. Struktur jadual termasuk lajur 'Orang', 'Kumpulan' dan 'Umur':
Contoh Jadual:
Person | Group | Age |
---|---|---|
Bob | 1 | 32 |
Jill | 1 | 34 |
Shawn | 1 | 42 |
Jake | 2 | 29 |
Paul | 2 | 36 |
Laura | 2 | 39 |
Objektif: Cari orang tertua dalam setiap kumpulan, beri keutamaan mengikut abjad jika umur adalah sama.
Penyelesaian 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>
Penjelasan:
Pertanyaan ini menggunakan LEFT JOIN
untuk membandingkan setiap orang (o
) dengan semua orang lain dalam kumpulan yang sama (b
). Fasal ON
menapis untuk baris di mana sama ada:
o.Age < b.Age
: o
lebih muda daripada b
(maksudnya o
bukan yang tertua).o.Age = b.Age AND o.Person > b.Person
: o
adalah umur yang sama dengan b
, tetapi mengikut abjad kemudian (bermaksud o
bukan yang tertua dalam susunan abjad).Klausa WHERE b.Person IS NULL
menapis mana-mana baris daripada o
yang mempunyai padanan dalam b
, meninggalkan hanya orang yang paling tua (atau mengikut abjad dahulu jika terdapat seri) dalam setiap kumpulan.
Penerokaan Selanjutnya:
Untuk pemahaman yang lebih komprehensif tentang teknik SQL lanjutan dan kemungkinan perangkap, rujuk sumber seperti "SQL Antipatterns Jilid 1: Mengelakkan Perangkap Pengaturcaraan Pangkalan Data."
Atas ialah kandungan terperinci Bagaimana untuk Mencari Orang Tertua dalam Setiap Kumpulan dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!