Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menanyakan Baris DISTINCT dalam PostgreSQL dengan ORDER BY Kriteria yang berbeza?

Bagaimana untuk Menanyakan Baris DISTINCT dalam PostgreSQL dengan ORDER BY Kriteria yang berbeza?

Mary-Kate Olsen
Lepaskan: 2025-01-21 12:26:09
asal
461 orang telah melayarinya

How to Query DISTINCT Rows in PostgreSQL with Different ORDER BY Criteria?

Pertanyaan PostgreSQL DISTINCT: Mengendalikan ORDER BY Discrepancies

Klausa DISTINCT ON PostgreSQL boleh mengemukakan cabaran apabila ungkapan DISTINCT ON tidak sejajar dengan kriteria ORDER BY awal. Ini kerana DISTINCT ON memilih baris pertama setiap kumpulan yang ditakrifkan oleh ungkapan DISTINCT ON, seperti yang ditentukan oleh klausa ORDER BY. Pesanan yang tidak sepadan membawa kepada ralat.

Untuk membetulkan ini, ungkapan DISTINCT ON lazimnya harus menjadi kriteria utama dalam klausa ORDER BY. Walau bagaimanapun, jika pesanan yang berbeza diutamakan, pendekatan alternatif tersedia.

Kaedah Alternatif untuk Pemilihan Baris Unik

Daripada bergantung semata-mata pada DISTINCT ON, pertimbangkan strategi ini untuk mendapatkan semula baris "atas" daripada setiap kumpulan berdasarkan susunan yang dipilih:

Kaedah 1: N Terhebat Setiap Kumpulan

Pendekatan ini menggunakan subkueri untuk mengenal pasti nilai maksimum (atau minimum) dalam setiap kumpulan dan kemudian bergabung kembali ke jadual asal untuk mendapatkan semula baris yang sepadan. Berikut ialah contoh:

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

Kaedah 2: Bersarang DISTINCT ON Pertanyaan

Penyelesaian khusus PostgreSQL yang lebih ringkas menggunakan pertanyaan bersarang:

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

Kaedah ini memberikan fleksibiliti dalam memilih baris unik sambil mengekalkan kawalan ke atas pesanan akhir, walaupun ia berbeza daripada kriteria pengelompokan. Pilih kaedah yang paling sesuai dengan keperluan khusus anda dan struktur data.

Atas ialah kandungan terperinci Bagaimana untuk Menanyakan Baris DISTINCT dalam PostgreSQL dengan ORDER BY Kriteria yang berbeza?. 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