Grouping_Expression: Ekspresi yang digunakan untuk menentukan kumpulan. Ekspresi depan dalam klausa ini mesti sepadan dengan ungkapan dalam klausa
berikutnya. SELECT DISTINCT ON (grouping_expression)
selected_columns
FROM table_name
ORDER BY grouping_expression, additional_ordering_expression(s)
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:
CREATE TABLE purchases (
id SERIAL PRIMARY KEY,
customer VARCHAR(50) NOT NULL,
total NUMERIC(10, 2) NOT NULL
);
Salin selepas log masuk
nilai null INSERT INTO purchases (customer, total) VALUES
('Joe', 5),
('Sally', 3),
('Joe', 2),
('Sally', 1);
Salin selepas log masuk
Jika nilai kumpulan mungkin mengandungi nilai null, disarankan untuk menambah
ke klausa SELECT DISTINCT ON (customer)
id, customer, total
FROM purchases
ORDER BY customer, total DESC, id;
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 ORDER BY customer, total DESC NULLS LAST, id;
Salin selepas log masuk
Mengoptimumkan kumpulan dengan pertanyaan untuk mengambil baris terkini setiap pengguna SELECT
Tanyakan nivers berkaitan n terakhir setiap baris