Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Baris N Teratas bagi setiap Kumpulan yang Dipesan oleh Lajur Tertentu dalam 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>
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!