PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL tương đương cho TOP n CÓ TIES:GIỚI HẠN với quan hệ?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. khóa trùng lặp postgresql vi phạm ràng buộc duy nhất

  2. Django:quyền bị từ chối khi cố gắng truy cập cơ sở dữ liệu sau khi khôi phục (di chuyển)

  3. Cách truy vấn mảng jsonb bằng toán tử IN

  4. SQL, Postgres OIDs, Chúng là gì và tại sao chúng hữu ích?

  5. Lấy N hàng cuối cùng trong cơ sở dữ liệu theo thứ tự?