我有下表:
在 Table_1 中,(ID, Name) 對可以重復并具有任意組合
Table_1:
| ID | 姓名 | 值1 | 值2 |
|---|---|---|---|
| 1 | 約翰 | 34 | 45 |
| 1 | 約翰 | 15 | 78 |
| 2 | 蘭迪 | 67 | 12 |
| 2 | 蘭迪 | 40 | 46 |
| 1 | 蘭迪 | 23 | 85 |
| 2 | 福爾摩斯 | 10 | 100 |
我想找到所有唯一對的所有資訊。所以輸出應該是:
| ID | 姓名 | 值1 | 值2 |
|---|---|---|---|
| 1 | 約翰 | 34 | 45 |
| 2 | 蘭迪 | 67 | 12 |
| 1 | 蘭迪 | 23 | 85 |
| 2 | 福爾摩斯 | 10 | 100 |
當我這樣做時,SELECT DISTINCT(ID, Name)我正確地獲得了獨特的對。但是我如何添加 value1, value2 列。因為添加 value1, value2 會導致對重復。
uj5u.com熱心網友回復:
您可以DISTINCT ON在這里使用:
SELECT DISTINCT ON (ID, Name) *
FROM yourTable
ORDER BY ID, Name;
演示
這將從每個(ID, Name)組合中任意回傳一個記錄。請注意,如果您想選擇保留哪個(或更多)重復記錄,您可以向ORDER BY子句添加另一個級別。例如,要選擇具有最高Value2值的重復記錄,您可以使用:
SELECT DISTINCT ON (ID, Name) *
FROM yourTable
ORDER BY ID, Name, Value2 DESC;
uj5u.com熱心網友回復:
嘗試 row_number 和 partition by。
SELECT *
FROM (
select *,
row_number() over(partition by Name order by Name desc) rn
from Table_1) as a
where rn = 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/361567.html
標籤:sql PostgreSQL的
上一篇:為什么即使在GCP上的Cloudsql中關閉autovacuum也會運行?
下一篇:在JOIN上支持OR條件的索引
