Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Baris N Teratas dalam Setiap Kumpulan dalam PostgreSQL?

Bagaimana untuk Memilih Baris N Teratas dalam Setiap Kumpulan dalam PostgreSQL?

Susan Sarandon
Susan Sarandonasal
2025-01-15 10:46:46535semak imbas

How to Select the Top N Rows within Each Group in PostgreSQL?

Menggunakan kumpulan LIMIT dalam PostgreSQL untuk memilih baris dalam kumpulan

Dalam PostgreSQL, anda boleh menggunakan fungsi tetingkap dan klausa PARTITION BY untuk mendapatkan semula N baris pertama setiap kumpulan. Teknik ini amat berguna apabila baris dalam setiap kumpulan perlu diisih mengikut lajur tertentu.

Pertimbangkan borang berikut:

<code class="language-sql">CREATE TABLE xxx (
  id SERIAL PRIMARY KEY,
  section_id INT,
  name VARCHAR(255)
);
INSERT INTO xxx (id, section_id, name) VALUES
  (1, 1, 'A'),
  (2, 1, 'B'),
  (3, 1, 'C'),
  (4, 1, 'D'),
  (5, 2, 'E'),
  (6, 2, 'F'),
  (7, 3, 'G'),
  (8, 2, 'H');</code>

Untuk mengekstrak dua baris pertama setiap section_id yang diisih mengikut lajur nama, anda boleh menggunakan pertanyaan berikut:

<code class="language-sql">SELECT
  * 
FROM (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) AS r,
    t.*
  FROM
    xxx t) x
WHERE
  x.r <= 2;</code>

Pertanyaan ini menggunakan fungsi tetingkap ROW_NUMBER() untuk menetapkan nombor baris unik kepada setiap kumpulan, bermula dari 1. Dengan membahagikan data mengikut section_id dan mengisih baris mengikut nama dalam setiap kumpulan, ia memberikan nombor baris berturut-turut kepada rekod yang diisih. Akhir sekali, pertanyaan luar menapis keluar baris dengan nombor baris lebih besar daripada 2, dengan berkesan memilih dua baris pertama untuk setiap section_id.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris N Teratas dalam Setiap Kumpulan dalam 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