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
628 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.

(
  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
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.

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
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!

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