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