Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Nilai Maksimum dalam Setiap Kumpulan dalam SQL?

Bagaimana untuk Memilih Nilai Maksimum dalam Setiap Kumpulan dalam SQL?

Patricia Arquette
Patricia Arquetteasal
2024-12-29 18:24:11640semak imbas

How to Select the Maximum Value within Each Group in SQL?

Kumpulan SQL Mengikut dengan Pemilihan Nilai Maksimum

Dalam SQL, klausa GROUP BY membenarkan kami mengumpulkan baris berdasarkan lajur yang ditentukan. Apabila digunakan dengan fungsi MAX, ia boleh digunakan untuk memilih nilai terbesar daripada setiap kumpulan.

Pernyataan Masalah

Andaikan anda mempunyai jadual yang mengandungi data berikut:

ID Name AlarmID AlarmUnit AlarmLevel
1 Test Voltage PSU Warning
2 Test Voltage PSU Ceased
3 Test Voltage PSU Warning
4 Test Temperature RCC Warning
5 Test Temperature RCC Ceased

Anda hanya mahu mendapatkan maklumat terkini untuk setiap kumpulan yang ditakrifkan oleh AlarmID dan AlarmUnit. Output yang dijangkakan hendaklah:

ID Name AlarmID AlarmUnit AlarmLevel
3 Test Voltage PSU Warning
5 Test Temperature RCC Ceased

Penyelesaian

Untuk menyelesaikan masalah ini, kita boleh menggunakan pertanyaan berikut dalam Oracle, SQL Server 2005 dan PostgreSQL 8.4 :

SELECT  *
FROM    (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY alarmId, alarmUnit ORDER BY id DESC) AS rn
        FROM    TableName
        ) q
WHERE   rn = 1

Untuk MySQL, pertanyaannya ialah:

SELECT  mi.*
FROM    (
        SELECT  alarmId, alarmUnit, MAX(id) AS mid
        FROM    TableName
        GROUP BY
                alarmId, alarmUnit
        ) mo
JOIN    TableName mi
ON      mi.id = mo.mid

Untuk PostgreSQL 8.3 dan ke bawah, kita boleh menggunakan:

SELECT  DISTINCT ON (alarmId, alarmUnit) *
FROM    TableName
ORDER BY
        alarmId, alarmUnit, id DESC

Atas ialah kandungan terperinci Bagaimana untuk Memilih Nilai Maksimum dalam Setiap Kumpulan dalam SQL?. 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