Rumah >pangkalan data >tutorial mysql >Bagaimanakah anda mendapatkan nilai maksimum N teratas daripada jadual MySQL, dikumpulkan mengikut lajur tertentu?

Bagaimanakah anda mendapatkan nilai maksimum N teratas daripada jadual MySQL, dikumpulkan mengikut lajur tertentu?

Linda Hamilton
Linda Hamiltonasal
2024-11-10 05:33:02247semak imbas

How do you retrieve the top N maximum values from a MySQL table, grouped by a specific column?

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!

Kenyataan:
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