Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan DISTINCT PostgreSQL ON PESANAN YANG Tidak Padan MENGIKUT Ralat Klausa?

Bagaimana untuk Menyelesaikan DISTINCT PostgreSQL ON PESANAN YANG Tidak Padan MENGIKUT Ralat Klausa?

Susan Sarandon
Susan Sarandonasal
2025-01-21 12:08:11197semak imbas

How to Resolve PostgreSQL's DISTINCT ON Mismatched ORDER BY Clause Error?

Menyelesaikan masalah PostgreSQL's DISTINCT ON Clause mismatch Error

Fasal

PostgreSQL DISTINCT ON memerlukan ungkapan ORDER BY untuk memadankan dengan tepat lajur yang berbeza. Mencuba pertanyaan dengan ungkapan yang berbeza akan mengakibatkan ralat. Hanya menambah address_id sebagai elemen pertama dalam klausa ORDER BY, manakala penyelesaian kepada ralat, mungkin tidak mengembalikan hasil yang dimaksudkan.

Berikut ialah kaedah alternatif untuk mendapatkan semula data yang betul tanpa mengubah ORDER BY dalam klausa DISTINCT ON:

Kaedah 1: Pendekatan-N-Per-Kumpulan Terhebat (DBMS-Agnostik)

Kaedah ini menggunakan subkueri untuk mencari purchased_at maksimum bagi setiap address_id, kemudian bergabung kembali ke jadual asal untuk mendapatkan semula baris lengkap:

<code class="language-sql">SELECT t1.* 
FROM purchases t1
JOIN (
    SELECT address_id, max(purchased_at) as max_purchased_at
    FROM purchases
    WHERE product_id = 1
    GROUP BY address_id
) t2
ON t1.address_id = t2.address_id AND t1.purchased_at = t2.max_purchased_at
ORDER BY t1.purchased_at DESC;</code>

Kaedah 2: Penyelesaian Khusus PostgreSQL

Pendekatan ini memanfaatkan pertanyaan bersarang, menggunakan DISTINCT ON dalam pertanyaan dalaman untuk memilih baris yang diingini bagi setiap address_id, dan kemudian memesan hasil akhir seperti yang diperlukan dalam pertanyaan luar:

<code class="language-sql">SELECT * 
FROM (
  SELECT DISTINCT ON (address_id) *
  FROM purchases 
  WHERE product_id = 1
  ORDER BY address_id, purchased_at DESC
) t
ORDER BY purchased_at DESC;</code>

Pendekatan ini menyediakan penyelesaian yang fleksibel untuk mendapatkan semula data yang diperlukan sambil mengekalkan susunan pengisihan yang diingini, mengelakkan keperluan untuk berkompromi pada ungkapan DISTINCT ON klausa ORDER BY.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan DISTINCT PostgreSQL ON PESANAN YANG Tidak Padan MENGIKUT Ralat Klausa?. 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