Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih Baris N Teratas bagi setiap Kumpulan yang Dipesan oleh Lajur Tertentu dalam PostgreSQL?

Bagaimana untuk Memilih Baris N Teratas bagi setiap Kumpulan yang Dipesan oleh Lajur Tertentu dalam PostgreSQL?

Susan Sarandon
Lepaskan: 2025-01-15 11:19:45
asal
251 orang telah melayarinya

How to Select the Top N Rows per Group Ordered by a Specific Column in PostgreSQL?

Sekatan kumpulan dalam PostgreSQL: Pilih N baris teratas dalam setiap kumpulan yang diisih mengikut lajur tersuai

Untuk mendapatkan semula N baris teratas dalam setiap kumpulan berdasarkan susunan lajur tersuai, PostgreSQL menyediakan penyelesaian untuk pengguna (terutama yang menggunakan PostgreSQL 8.4 dan ke atas).

Pertimbangkan jadual contoh yang mengandungi lajur 'id', 'section_id' dan 'name':

id section_id name
1 1 A
2 1 B
3 1 C
4 1 D
5 2 E
6 2 F
7 3 G
8 2 H

Berdasarkan data yang diberikan, output yang dikehendaki ialah memilih dua baris pertama (diisih mengikut 'nama') untuk setiap 'id_bahagian'.

Penyelesaian untuk PostgreSQL 8.4 dan ke atas

<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>
Salin selepas log masuk

Penyelesaian lanjutan ini menggunakan fungsi 'ROW_NUMBER()' dengan klausa 'PARTITION BY' dan 'ORDER BY' untuk mencapai set hasil yang diingini. Setiap baris dalam jadual 'xxx' diberikan pangkat dalam kumpulan 'section_id' masing-masing, dengan baris diisih mengikut 'nama'. Dengan pemilihan berikutnya berdasarkan syarat 'x.r <= 2' kami mengehadkan bilangan baris yang dikembalikan dalam setiap kumpulan dengan berkesan.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris N Teratas bagi setiap Kumpulan yang Dipesan oleh Lajur Tertentu dalam PostgreSQL?. 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