Rumah >pangkalan data >tutorial mysql >Mengapakah Klausa ORDER BY Digunakan Selepas Klausa GROUP BY dalam MySQL?

Mengapakah Klausa ORDER BY Digunakan Selepas Klausa GROUP BY dalam MySQL?

DDD
DDDasal
2024-11-13 00:20:02906semak imbas

Why is the ORDER BY Clause Applied After the GROUP BY Clause in MySQL?

Pesanan MySQL sebelum Kumpulan Oleh

Dalam MySQL, apabila melaksanakan pertanyaan yang melibatkan klausa ORDER BY dan GROUP BY, adalah penting untuk diperhatikan bahawa klausa ORDER BY digunakan selepas klausa GROUP BY. Ini bermakna bahawa hasil pertama dikumpulkan dan kemudian diisih, yang mungkin bukan tingkah laku yang diingini.

Masalah:

Pertimbangkan pertanyaan berikut:

SELECT wp_posts.* FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
ORDER BY wp_posts.post_date DESC

Pertanyaan ini bertujuan untuk mendapatkan semula catatan terkini untuk setiap pengarang dan mengumpulkan hasil mengikut pengarang. Walau bagaimanapun, klausa ORDER BY digunakan selepas klausa GROUP BY, menyebabkan keputusan dipesan selepas pengumpulan telah berlaku.

Penyelesaian:

Untuk menangani perkara ini isu, pertanyaan boleh diubah suai untuk melaksanakan susunan sebelum pengumpulan:

SELECT wp_posts.* FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
ORDER BY wp_posts.post_date DESC
GROUP BY wp_posts.post_author

Pertanyaan yang disemak ini mula-mula memesan keputusan mengikut tarikh pos dalam tertib menurun sebelum melaksanakan pengumpulan mengikut pengarang. Hasilnya ialah siaran terkini untuk setiap pengarang akan diambil dan diletakkan dahulu dalam set hasil.

Penyelesaian Alternatif (untuk Pangkalan Data Bukan MySQL):

Dalam pangkalan data yang tidak menyokong pesanan sebelum mengumpulkan, seperti SQL Server dan PostgreSQL, penyelesaian alternatif boleh digunakan:

SELECT
    wp_posts.*
FROM
    wp_posts
JOIN
    (
        SELECT
            g.post_author
            MAX(g.post_date) AS post_date
        FROM wp_posts AS g
        WHERE
            g.post_status='publish'
            AND g.post_type='post'
        GROUP BY g.post_author
    ) AS t
    ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date

Pertanyaan ini menggunakan subkueri untuk mengenal pasti tarikh siaran maksimum bagi setiap pengarang dan kemudian menyertai ini keputusan ditetapkan dengan jadual wp_posts utama untuk mendapatkan semula data siaran sebenar. Harap maklum bahawa penyelesaian ini mungkin mengembalikan berbilang baris untuk pengarang dengan berbilang siaran pada tarikh yang sama, jadi penapisan tambahan mungkin diperlukan bergantung pada keperluan khusus.

Atas ialah kandungan terperinci Mengapakah Klausa ORDER BY Digunakan Selepas Klausa GROUP BY dalam MySQL?. 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