我有一種情況,如果下表中的值為A.
| 姓名 | 價值 |
|---|---|
| 測驗 1 | 一種 |
| 測驗 2 | 一種 |
| 測驗 3 | 一種 |
| 測驗 4 | 一種 |
| 測驗 5 | 一種 |
| 測驗 6 | 乙 |
| 測驗 7 | 乙 |
| 測驗 8 | 乙 |
| 測驗 9 | 乙 |
如果我希望A基于值的結果在我選擇記錄時受到前 2 條記錄的限制,我想要的結果如下所示。關于如何實作這一點的任何想法?我應該考慮window函式嗎?
| 姓名 | 價值 |
|---|---|
| 測驗 1 | 一種 |
| 測驗 2 | 一種 |
| 測驗 6 | 乙 |
| 測驗 7 | 乙 |
| 測驗 8 | 乙 |
| 測驗 9 | 乙 |
uj5u.com熱心網友回復:
是的,視窗函式會有所幫助。
with t as
(
select *, row_number() over (partition by "Value" order by "Name") rn
from the_table
)
select * from t
where ("Value" = 'A' and rn <= 2) or ("Value" <> 'A');
uj5u.com熱心網友回復:
嘗試選擇帶有 'A' 的行并限制為 2 行的通用表運算式,以及帶有所有帶有 'B' 的行的 UNION SELECT ...
WITH
indata(Name,Value) AS (
SELECT 'Test 1','A'
UNION ALL SELECT 'Test 2','A'
UNION ALL SELECT 'Test 3','A'
UNION ALL SELECT 'Test 4','A'
UNION ALL SELECT 'Test 5','A'
UNION ALL SELECT 'Test 6','B'
UNION ALL SELECT 'Test 7','B'
UNION ALL SELECT 'Test 8','B'
UNION ALL SELECT 'Test 9','B'
)
,
a_rows AS (
SELECT
*
FROM indata
WHERE value='A'
ORDER BY 1
LIMIT 2
)
SELECT
*
FROM a_rows
UNION ALL SELECT
*
FROM indata
WHERE value='B'
;
-- out Name | Value
-- out -------- -------
-- out Test 1 | A
-- out Test 2 | A
-- out Test 6 | B
-- out Test 7 | B
-- out Test 8 | B
-- out Test 9 | B
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/358080.html
標籤:sql PostgreSQL的
上一篇:如何從json庫中洗掉字串
