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
Linda Hamiltonasal
2025-01-25 20:11:11798semak imbas

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>

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>

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!

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