Rumah > pangkalan data > tutorial mysql > Bagaimana untuk mendapatkan entri terawal untuk setiap kumpulan di PostgreSQL?

Bagaimana untuk mendapatkan entri terawal untuk setiap kumpulan di PostgreSQL?

Linda Hamilton
Lepaskan: 2025-01-25 20:11:11
asal
698 orang telah melayarinya

How to Retrieve the Earliest Entry for Each Group in PostgreSQL?

dengan cekap memilih baris pertama setiap kumpulan dalam postgresql

Panduan ini menunjukkan bagaimana untuk mendapatkan entri paling awal untuk setiap kumpulan di PostgreSQL, tugas yang sama apabila bekerja dengan data dikumpulkan. Kaedah yang paling berkesan menggunakan klausa

. DISTINCT ON

memanfaatkan klausa DISTINCT ON

klausa PostgreSQL

menyediakan cara yang ringkas dan cekap untuk memilih baris pertama dari setiap kumpulan yang ditakrifkan oleh lajur yang ditentukan. Sintaksinya adalah mudah: DISTINCT ON

Contohnya: Mengenal pasti pembelian pertama untuk setiap pelanggan
<code class="language-sql">SELECT DISTINCT ON (column_list)
FROM table_name
ORDER BY column_list, ...;</code>
Salin selepas log masuk

Pertimbangkan jadual dengan lajur

,

, dan purchases. Untuk mencari pembelian terawal (berdasarkan lajur id) untuk setiap pelanggan dengan jumlah tertinggi, gunakan pertanyaan ini: customer total id

Pertimbangan penting:
<code class="language-sql">SELECT DISTINCT ON (customer)
       id, customer, total
FROM   purchases
ORDER  BY customer, total DESC, id;</code>
Salin selepas log masuk

pengendalian null:
    Jika lajur
  • membolehkan nilai null, termasuk dalam klausa untuk memastikan nilai bukan null diprioritaskan. total NULLS LAST Pilih senarai fleksibiliti: ORDER BY Senarai
  • tidak terhad kepada lajur dalam
  • atau . SELECT DISTINCT ON kekhususan PostgreSQL: ORDER BY
  • adalah lanjutan khusus PostgreSQL, bukan sebahagian daripada SQL standard
  • Pesanan Alternatif: DISTINCT ON Untuk memerintahkan hasil akhir secara berbeza dari perintah pengelompokan, sarang pertanyaan dan memohon klausa
  • sekunder.
  • ORDER BY Mengoptimumkan prestasi dengan pengindeksan:
Mewujudkan indeks berbilang lajur pada

dengan ketara meningkatkan prestasi pertanyaan, terutamanya apabila bilangan baris setiap pelanggan agak kecil.

Pendekatan alternatif untuk dataset besar:

(customer, total DESC, id)

Untuk dataset dengan banyak baris setiap pelanggan, strategi alternatif mungkin lebih cekap:

subqueries:

Menggunakan subquery atau subquery berkorelasi untuk mencari maksimum

untuk setiap pelanggan, kemudian pilih baris dengan minimum
    untuk pelanggan tersebut.
  • Jadual sementara/CTES: Buat jadual sementara atau ekspresi meja biasa (CTE) yang mengandungi pelanggan yang unik, dan sertai dengan jadual asal untuk mendapatkan baris yang dikehendaki. Pendekatan ini boleh memberi manfaat kepada senario yang kompleks. total id

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan entri terawal untuk setiap kumpulan di PostgreSQL?. 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