Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Cekap Mencari Nilai Maks/Min setiap Kumpulan Menggunakan SQL Joins?

Bagaimana untuk Cekap Mencari Nilai Maks/Min setiap Kumpulan Menggunakan SQL Joins?

DDD
Lepaskan: 2025-01-02 13:41:38
asal
498 orang telah melayarinya

How to Efficiently Find Max/Min Values per Group Using SQL Joins?

Mendapatkan Nilai Maksimum/Minimum Setiap Kumpulan Menggunakan Gabungan

Dalam penyelesaian ini, kami menggunakan operasi gabungan untuk mendapatkan semula baris dengan nilai tertinggi atau terendah untuk lajur tertentu dalam setiap kumpulan, tanpa menggunakan kedudukan atau subkueri.

Untuk mencari baris dengan nilai OrderField tertinggi setiap kumpulan:

SELECT t1.*
FROM `Table` AS t1
LEFT OUTER JOIN `Table` AS t2
  ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField
WHERE t2.GroupId IS NULL
ORDER BY t1.OrderField;
Salin selepas log masuk

Sekiranya berbilang rekod berkongsi nilai OrderField maksimum yang sama dalam kumpulan, anda mungkin mahu memperhalusi lagi syarat:

SELECT t1.*
FROM `Table` AS t1
LEFT OUTER JOIN `Table` AS t2
  ON t1.GroupId = t2.GroupId 
        AND (t1.OrderField < t2.OrderField 
         OR (t1.OrderField = t2.OrderField AND t1.Id < t2.Id))
WHERE t2.GroupId IS NULL
Salin selepas log masuk

Pendekatan ini memastikan bahawa baris dengan nilai OrderField yang paling besar dikembalikan apabila terdapat ikatan dalam kumpulan.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Nilai Maks/Min setiap Kumpulan Menggunakan SQL Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan