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

Bagaimana untuk Memesan Keputusan MySQL Sebelum Pengumpulan?

Barbara Streisand
Lepaskan: 2024-11-16 11:14:02
asal
401 orang telah melayarinya

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

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

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

Atas ialah kandungan terperinci Bagaimana untuk Memesan Keputusan MySQL Sebelum Pengumpulan?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan