Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memesan Keputusan MySQL Sebelum Pengumpulan?

Bagaimana untuk Memesan Keputusan MySQL Sebelum Pengumpulan?

Barbara Streisand
Barbara Streisandasal
2024-11-16 11:14:02396semak imbas

How to Order MySQL Results Before Grouping?

MySQL: Memesan Keputusan Sebelum Kumpulan Oleh

Apabila mengumpulkan hasil dalam MySQL, adalah penting untuk memahami susunan operasi. Secara lalai, MySQL akan memesan keputusan selepas ia dikumpulkan, yang mungkin bukan gelagat yang diingini dalam kes tertentu.

Pertanyaan dan Had Asal

Pertimbangkan perkara berikut pertanyaan:

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 mengumpulkan hasil dengan betul untuk menunjukkan hanya siaran terkini untuk setiap pengarang. Walau bagaimanapun, keputusan dipesan selepas pengumpulan, jadi siaran terkini mungkin tidak semestinya berada di permulaan senarai.

Penyelesaian Menggunakan HAVING

Untuk memesan keputusan sebelum mengumpulkan, kita boleh menggunakan klausa HAVING:

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

Klausa HAVING menapis keputusan selepas pengumpulan, memastikan bahawa hanya baris dengan tarikh_post_maksimum untuk setiap pengarang dikembalikan. Ini menjamin bahawa siaran terbaharu ditunjukkan pada permulaan senarai.

Penyelesaian Alternatif untuk Pangkalan Data Lain

Jika menggunakan pangkalan data yang tidak menyokong klausa HAVING ( seperti Postgres atau SQL Server), penyelesaian alternatif adalah untuk menyertai jadual asal dengan subquery yang mengira post_date maksimum untuk setiap pengarang:

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
ORDER BY wp_posts.post_date

Atas ialah kandungan terperinci Bagaimana untuk Memesan Keputusan MySQL Sebelum Pengumpulan?. 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