Postgres 13 cuối cùng thêm WITH TIES
. Xem:
- Lớn hơn hoặc bằng tốc độ ALL () và bằng MAX ()
Không có WITH TIES
lên đến PostgreSQL 12, giống như trong SQL Server.
Trong PostgreSQL, tôi sẽ thay thế điều này cho TOP n WITH TIES .. ORDER BY <something>
:
WITH cte AS (
SELECT *, rank() OVER (ORDER BY <something>) AS rnk
FROM tbl
)
SELECT *
FROM cte
WHERE rnk <= n;
Để rõ ràng, rank()
đúng, dense_rank()
sẽ sai (trả về quá nhiều hàng).
Hãy xem xét trích dẫn này từ tài liệu SQL Server (từ liên kết ở trên):
Ví dụ:nếu biểu thức được đặt thành 5 nhưng 2 hàng bổ sung khớp với giá trị của cột ORDER BY ở hàng 5, tập hợp kết quả sẽ chứa 7 hàng.
Công việc của WITH TIES
là bao gồm tất cả các đồng nghiệp của hàng cuối cùng trong đầu n như được định nghĩa bởi ORDER BY
mệnh đề. rank()
cho cùng một kết quả.
Để đảm bảo, tôi đã thử nghiệm với máy chủ SQL, đây là bản demo trực tiếp.
Và đây là SQLfiddle thuận tiện hơn.