PostgreSQL中的分組限制:依自訂列排序選擇每個群組中的前N行
為了根據自訂列順序檢索每個群組中的前N行,PostgreSQL為使用者(特別是使用PostgreSQL 8.4以上版本的使用者)提供了一種解決方案。
考慮包含列'id'、'section_id'和'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 |
根據提供的數據,所需輸出是為每個'section_id'選擇前兩行(按'name'排序)。
PostgreSQL 8.4以上版本的解決方案
<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>
這段高階解決方案利用帶有'PARTITION BY'和'ORDER BY'子句的'ROW_NUMBER()'函數來實現所需的結果集。 'xxx'表中的每一行都在其各自的'section_id'組內分配一個排名,行按'name'排序。透過基於條件'x.r
以上是如何在 PostgreSQL 中選擇按特定列排序的每組前 N 行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!