Rumah > pangkalan data > tutorial mysql > Bagaimana untuk mencari baris pertama dalam setiap kumpulan menggunakan klausa PostgreSQL yang berbeza?

Bagaimana untuk mencari baris pertama dalam setiap kumpulan menggunakan klausa PostgreSQL yang berbeza?

Barbara Streisand
Lepaskan: 2025-01-25 20:17:18
asal
267 orang telah melayarinya

How to Find the First Row in Each Group Using PostgreSQL's DISTINCT ON Clause?

Cari baris pertama setiap kumpulan

Pengenalan

Apabila memproses data kumpulan, baris pertama setiap kumpulan perlu diekstrak. Tugas ini boleh dilakukan dengan menggunakan klausa , yang merupakan fungsi lanjutan unik PostgreSQL.

struktur pertanyaan DISTINCT ON

Grouping_Expression:

Ekspresi yang digunakan untuk menentukan kumpulan. Ekspresi depan dalam klausa ini mesti sepadan dengan ungkapan dalam klausa

berikutnya.
<code class="language-sql">SELECT DISTINCT ON (grouping_expression)
       selected_columns
FROM   table_name
ORDER  BY grouping_expression, additional_ordering_expression(s)</code>
Salin selepas log masuk

selectd_columns: lajur yang akan diambil dalam output. ORDER BY tambahan_ordering_expression (s):

Ekspresi pilihan yang digunakan untuk menentukan susunan setiap kumpulan. Ekspresi ini mesti diikuti selepas ungkapan kumpulan dalam klausa .

Contoh pertimbangkan

jadual:

dan data berikut: ORDER BY

Untuk mengambil pelanggan dengan jumlah pembelian tertinggi, sila gunakan pertanyaan berikut:

purchases output:

<code class="language-sql">CREATE TABLE purchases (
    id SERIAL PRIMARY KEY,
    customer VARCHAR(50) NOT NULL,
    total NUMERIC(10, 2) NOT NULL
);</code>
Salin selepas log masuk

nilai null
<code class="language-sql">INSERT INTO purchases (customer, total) VALUES
('Joe', 5),
('Sally', 3),
('Joe', 2),
('Sally', 1);</code>
Salin selepas log masuk

Jika nilai kumpulan mungkin mengandungi nilai null, disarankan untuk menambah

ke klausa
<code class="language-sql">SELECT DISTINCT ON (customer)
       id, customer, total
FROM   purchases
ORDER  BY customer, total DESC, id;</code>
Salin selepas log masuk
untuk memastikan pemprosesan keutamaan mempunyai nilai bukan null:

Pilih Lajur Lain

Senarai ini tidak terhad kepada ungkapan kumpulan. Ia boleh mengandungi mana -mana lajur lain, yang membolehkan teknologi ini menggantikan fungsi sub -query atau agregat/tetingkap kompleks.
<code>id | customer | total
-----------------------------
1  | Joe      | 5
2  | Sally    | 3</code>
Salin selepas log masuk

Langkah berjaga -jaga prestasi

Kecekapan pertanyaan bergantung kepada pengagihan data dan bilangan baris setiap kumpulan. Bagi kumpulan kecil, ia biasanya sangat berkesan. Walau bagaimanapun, bagi kumpulan besar, teknologi alternatif yang diterangkan dalam pautan berikut boleh memberikan prestasi yang lebih baik: ORDER BY NULLS LAST

Pilih Jarak dalam PostgreSQL lebih perlahan daripada yang dijangkakan
<code class="language-sql">ORDER  BY customer, total DESC NULLS LAST, id;</code>
Salin selepas log masuk

Mengoptimumkan kumpulan dengan pertanyaan untuk mengambil baris terkini setiap pengguna

SELECT

Tanyakan nivers berkaitan n terakhir setiap baris

Atas ialah kandungan terperinci Bagaimana untuk mencari baris pertama dalam setiap kumpulan menggunakan klausa PostgreSQL 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