Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan N Orang Tertua Teratas daripada Setiap Kumpulan dalam Set Data?

Bagaimana untuk Mendapatkan N Orang Tertua Teratas daripada Setiap Kumpulan dalam Set Data?

Susan Sarandon
Lepaskan: 2025-01-25 10:06:11
asal
566 orang telah melayarinya

How to Retrieve the Top N Oldest People from Each Group in a Dataset?

dengan cekap memilih individu tertua dari setiap kumpulan

Artikel ini menunjukkan dua kaedah untuk mendapatkan semula N (dalam kes ini, dua) individu tertua dari setiap kumpulan dalam dataset. Yang pertama menggunakan pendekatan

, sementara yang kedua menggunakan penomboran baris untuk penyelesaian yang lebih berskala. UNION ALL

Kaedah 1: Kesatuan Semua (sesuai untuk bilangan kumpulan yang kecil dan tetap)

Kaedah ini adalah mudah untuk bilangan kumpulan yang diketahui dan terhad. Ia memilih individu tertua n teratas dari setiap kumpulan secara individu dan menggabungkan hasilnya. Walau bagaimanapun, pendekatan ini menjadi rumit dan tidak cekap kerana bilangan kumpulan meningkat.

<code class="language-sql">(
  SELECT *
  FROM mytable
  WHERE `group` = 1  -- Group 1
  ORDER BY age DESC
  LIMIT 2
)
UNION ALL
(
  SELECT *
  FROM mytable
  WHERE `group` = 2  -- Group 2
  ORDER BY age DESC
  LIMIT 2
)
-- ... Add more UNION ALL clauses for additional groups</code>
Salin selepas log masuk

kaedah 2: penomboran baris (penyelesaian berskala untuk bilangan kumpulan besar atau tidak diketahui)

Kaedah ini secara dinamik memberikan nombor baris kepada setiap individu dalam kumpulan masing -masing, yang diperintahkan oleh umur dalam urutan menurun. Ini membolehkan pemilihan yang cekap dari individu tertua di atas semua kumpulan.

<code class="language-sql">SELECT person, `group`, age
FROM
(
   SELECT person, `group`, age,
      (@num:=IF(@group = `group`, @num +1, IF(@group := `group`, 1, 1))) AS row_number
  FROM test t
  CROSS JOIN (SELECT @num:=0, @group:=NULL) c
  ORDER BY `group`, Age DESC, person
) AS x
WHERE x.row_number <= 2 -- Select the top 2 from each group</code>
Salin selepas log masuk
Pendekatan ini memanfaatkan pembolehubah

dan @num untuk menjejaki nombor baris dan kumpulan, masing -masing. @group memulakan pembolehubah ini. Klausa akhir CROSS JOIN menapis hasilnya hanya memasukkan 2 individu teratas dari setiap kumpulan. Kaedah ini jauh lebih cekap dan mudah disesuaikan daripada pendekatan WHERE untuk dataset dengan banyak kumpulan. UNION ALL

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan N Orang Tertua Teratas daripada Setiap Kumpulan dalam Set Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan