假設,我有一些像
| id | user_id | value |
|:---|:-------:| -----:|
| 1| 1| a|
| 2| 1| b|
| 3| 1| c|
| 4| 2| d|
| 5| 2| e|
| 6| 3| f|
| 7| 4| g|
| 8| 4| h|
所以我需要為每個用戶列印所有第二個值,例如
| id | user_id | value |
|:---|:-------:| -----:|
| 2| 1| b|
| 5| 2| e|
| 8| 4| h|
那么,我該怎么做呢?
uj5u.com熱心網友回復:
使用行內視圖和分析為每個按 ID 排序的 user_ID 生成行號,然后只需選擇行號 = 2 的位置。
SELECT ID, user_ID, Value
FROM (SELECT ID, user_ID, Value, Row_number() over (partition by user_ID order by ID) RN
FROM table) InLineTable
WHERE RN=2
或使用公共表運算式來做同樣的事情
本質上,行號的作用是針對每個 user_Id 對每個 ID 計數 1。它為每個新的 user_ID 重新啟動。由于我們按 ID 訂購,因此我們總是得到第二個 ID。
WITH CTE AS (SELECT ID, user_ID, Value, Row_number() over (partition by user_ID
order by ID) RN
FROM table)
SELECT ID, user_ID, Value
FROM CTE
WHERE RN=2
uj5u.com熱心網友回復:
您可以在 postgres 中使用 rank ,例如:
select id, user_id, value
from (
select id, user_id, value,
rank() over (partition by user_id order by id) as u_rank
from t1
)z
where u_rank = 2
輸出:
id user_id value
2 1 b
5 2 e
8 4 h
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372317.html
標籤:sql 数据库 PostgreSQL的
下一篇:無法“交換”資料庫中的值的腳本
