我有一個名為 assets 的示例表,如下所示:
| ID | 姓名 | 塊號 |
|---|---|---|
| 1 | 資產1 | 2 |
| 2 | 資產2 | 2 |
| 3 | 資產3 | 3 |
特定區塊中可以有任意數量的資產。我需要表中至少 100 行,并包含block_no. 就像,如果 2 有 95 行,block_no3 上有大約 20行block_no,我需要block_no3 中的所有 20 行,就好像我正在基于block_no.
這可能和可行嗎?
uj5u.com熱心網友回復:
Postgres 13 或更高版本
WITH TIES在Postgres 13或更高版本中使用了一個非常簡單的解決方案:
SELECT *
FROM assets
WHERE block_no >= 2 -- your starting block
ORDER BY block_no
FETCH FIRST 100 ROWS WITH TIES;
這將回傳至少100 行(如果有足夠的資格),加上第 100 行的所有同行。
如果您的表不是特別小,則索引對(block_no)性能至關重要。
看:
- 大于等于ALL()且等于MAX()速度
舊版本
rank()在子查詢中使用視窗函式:
SELECT (a).*
FROM (
SELECT a, rank() OVER (ORDER BY block_no) AS rnk
FROM assets a
) sub
WHERE rnk <= 100;
結果一樣。
我使用行型別的一個小技巧rnk從結果中去除添加的內容。這是一個可選的添加。
看:
- PostgreSQL 相當于 TOP n WITH TIES: LIMIT“with ties”?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355178.html
標籤:sql PostgreSQL sql限制
上一篇:SQL層次ID型別問題
