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
Lepaskan: 2024-11-10 10:59:02
asal
707 orang telah melayarinya

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
Salin selepas log masuk

Untuk n=2, kami ingin mendapatkan keputusan ini:

3    
4    
7    
8    
Salin selepas log masuk

Penghampiran Menggunakan Kumpulan Maks

Pendekatan awal ialah mengira nilai maksimum bagi setiap kumpulan:

SELECT max(column1) FROM table GROUP BY column2
Salin selepas log masuk

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)
Salin selepas log masuk

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
Salin selepas log masuk

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