Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Nilai Atas n Maks daripada Jadual Pangkalan Data?

Bagaimana untuk Mendapatkan Nilai Atas n Maks daripada Jadual Pangkalan Data?

Barbara Streisand
Barbara Streisandasal
2024-11-10 10:59:02695semak imbas

How to Retrieve the Top n Max Values from a Database Table?

Memilih Nilai Maks Teratas daripada Jadual

Dalam pengurusan pangkalan data, mungkin perlu untuk mendapatkan semula nilai n tertinggi teratas daripada jadual. Untuk mencapai matlamat ini, terdapat beberapa pendekatan yang tersedia. Pertimbangkan jadual berikut:

column1  column2
   1       foo
   2       foo
   3       foo
   4       foo
   5       bar
   6       bar
   7       bar
   8       bar

Untuk n=2, kami ingin mendapatkan keputusan ini:

3    
4    
7    
8    

Penghampiran Menggunakan Kumpulan Maks

Pendekatan awal ialah mengira nilai maksimum bagi setiap kumpulan:

SELECT max(column1) FROM table GROUP BY column2

Walau bagaimanapun, kaedah ini hanya memberikan nilai teratas untuk setiap kumpulan, bukan nilai n teratas.

Penyelesaian Berasaskan Kesatuan

Untuk n=2, pertanyaan berasaskan kesatuan berikut boleh digunakan:

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)

Pertanyaan ini memilih nilai teratas dan kemudian mengecualikan pendua dengan menyertai pertanyaan kedua, yang mendapati nilai tertinggi seterusnya belum dipilih.

Simulasi Kedudukan

Untuk sebarang nilai n, pendekatan yang lebih generik ialah mensimulasikan pangkat( ) fungsi ke atas partition. Satu cara untuk melakukannya ialah:

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

Pertanyaan ini mengumpulkan nilai mengikut lajur yang diingini dan kemudian mencari nilai tertinggi seterusnya untuk setiap kumpulan dalam had yang ditentukan (dalam kes ini, 2,1 untuk n= 2).

Dengan mengikut pendekatan ini, anda boleh memilih nilai n maksimum teratas dengan berkesan daripada jadual tertentu, memastikan nilai pendua dihapuskan dan bilangan rekod yang betul dikembalikan.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nilai Atas n Maks daripada Jadual Pangkalan Data?. 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