到處都有人使用 ORDER BY 和 LIMIT 選擇最高價值。但是如何處理最后一個元素有重復條目的情況。
考慮一個 5 行表
| 姓名 | number_of_cookies |
|---|---|
| 馬特 | 32 |
| 格雷格 | 77 |
| 萬斯 | 21 |
| 陳 | 20 |
| 路易絲 | 77 |
現在我想要擁有最多 cookie 的人。如果你這樣查詢
select * from table ORDER BY number_of_cookies DESC LIMIT 1;
這只會得到一個人,無論是 Louise 還是 greg。但這里的答案是兩個人都擁有最多數量的餅干。使用 LIMIT 時如何在 Postgres 中處理這種情況?
此外,如果我進一步擴展這個問題,如果我想列出前 10 個值,并且存在這樣的情況(關系),那么我該如何處理呢?
uj5u.com熱心網友回復:
您可以使用RANK分析功能:
WITH cte AS (
SELECT *, RANK() OVER (ORDER BY number_of_cookies DESC) rnk
FROM yourTable
)
SELECT name, number_of_cookies
FROM cte
WHERE rnk = 1;
uj5u.com熱心網友回復:
你可以嘗試這樣的事情:
select * from table
where number_of_cookies = (select max(number_of_cookies) from table)
這將回傳具有最大數量的所有名稱
uj5u.com熱心網友回復:
有一種 SQL 標準方法可以做到這一點。它不使用 LIMIT 關鍵字,而是使用 FETCH
FETCH FIRST 1 ROWS WITH TIES
但是對標準的 WITH TIES 部分的支持直到 v13 才被添加到 PostgreSQL。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/430065.html
標籤:sql PostgreSQL sql 限制
