Rumah >pangkalan data >tutorial mysql >Bagaimanakah anda mendapatkan nilai maksimum N teratas daripada jadual MySQL, dikumpulkan mengikut lajur tertentu?
Mendapatkan Nilai N Maksimum Teratas daripada Jadual MySQL
Tugas biasa dalam analisis data melibatkan pemilihan nilai n maksimum teratas untuk lajur tertentu daripada sebuah meja. Pertimbangkan jadual berikut:
column1 | column2 |
---|---|
1 | foo |
2 | foo |
3 | foo |
4 | foo |
5 | bar |
6 | bar |
7 | bar |
8 | bar |
Pernyataan Masalah:
Untuk nilai n yang diberikan, dapatkan semula n nilai maksimum atas untuk lajur1, dikumpulkan mengikut lajur2. Dalam contoh di atas, untuk n=2, output yang dikehendaki ialah:
column1 |
---|
3 |
4 |
7 |
8 |
Penyelesaian:
Walaupun pendekatan mudah mungkin melibatkan pengumpulan baris mengikut lajur2 dan memilih nilai maksimum untuk setiap kumpulan, ini hanya akan mengembalikan nilai maksimum mutlak untuk setiap kumpulan. Untuk mendapatkan semula nilai n teratas, pendekatan yang lebih maju diperlukan.
Pendekatan Berasaskan UNION:
Satu pendekatan melibatkan penggunaan klausa UNION untuk menggabungkan berbilang pertanyaan yang setiap satu pilih nilai maksimum untuk kumpulan yang berbeza. Untuk n=2, pertanyaan berikut sudah memadai:
SELECT max(column1) m FROM table t GROUP BY column2 UNION SELECT max(column1) m FROM table t WHERE column1 NOT IN (SELECT max(column1) WHERE column2 = t.column2)
Pendekatan Berasaskan Kedudukan:
Untuk nilai n yang lebih fleksibel, pendekatan berasaskan pangkat boleh bekerja. Ini melibatkan pemberian pangkat kepada setiap baris berdasarkan nilai lajur1, dan kemudian memilih baris dengan kedudukan n teratas. Pertanyaan berikut melaksanakan pendekatan ini:
SELECT t.* FROM (SELECT grouper, (SELECT val FROM table li WHERE li.grouper = dlo.grouper ORDER BY li.grouper, li.val DESC LIMIT 2,1) AS mid FROM (SELECT DISTINCT grouper FROM table ) dlo ) lo, table t WHERE t.grouper = lo.grouper AND t.val > lo.mid
Ganti 'kerapu' dengan nama kumpulan demi lajur dan 'val' dengan lajur yang memegang nilai.
Subquery dalam Klausa LIMIT mentakrifkan nilai kedudukan ke-n untuk setiap kumpulan. Baris dengan nilai lebih besar daripada nilai kedudukan ke-n ini kemudiannya dipilih.
Kesimpulan:
Kedua-dua pendekatan menyediakan kaedah yang berkesan untuk memilih nilai maksimum n teratas daripada jadual, setiap satu dengan kekuatan dan keterbatasan yang tersendiri. Pendekatan berasaskan kesatuan adalah mudah dan teguh, manakala pendekatan berasaskan pangkat menawarkan fleksibiliti dalam menentukan bilangan nilai maksimum untuk diambil.
Atas ialah kandungan terperinci Bagaimanakah anda mendapatkan nilai maksimum N teratas daripada jadual MySQL, dikumpulkan mengikut lajur tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!