>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL에서 SQL Server의 TOP n WITH TIES를 시뮬레이션하는 방법은 무엇입니까?

PostgreSQL에서 SQL Server의 TOP n WITH TIES를 시뮬레이션하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-04 19:01:41992검색

How to Simulate SQL Server's TOP n WITH TIES in PostgreSQL?

TOP n WITH TIES에 해당하는 PostgreSQL: LIMIT "with ties"

PostgreSQL은 SQL Server의 TOP n WITH에 직접적으로 해당하는 기능을 제공하지 않습니다. TIES 조항. PostgreSQL의 LIMIT 절은 반환할 행 수를 지정하는 데 사용되지만 동점은 포함되지 않습니다.

공통 테이블 표현식(CTE)을 사용하는 대체 접근 방식

PostgreSQL 버전 12까지에서는 순위 함수와 함께 공통 테이블 표현식(CTE)을 사용하여 WITH TIES를 시뮬레이션하는 대체 접근 방식이 있습니다. 동작:

WITH cte AS (
   SELECT *, rank() OVER (ORDER BY <something>) AS rnk
   FROM   tbl
   )
SELECT *
FROM   cte
WHERE  rnk <= n;

여기서 Rank()는 ORDER BY 절을 기반으로 각 행에 순위를 할당합니다. WHERE 절의 <= 비교를 사용하면 동점을 포함하여 순위가 n 이하인 모든 행이 선택됩니다.

PostgreSQL 12 이하의 대형 테이블에 대한 더 빠른 대안

큰 테이블의 경우 CTE 방법보다 빠른 대체 접근 방식을 제공합니다. 여기:

[비슷한 성능을 갖춘 Postgres 11의 FETCH FIRST WITH TIES와 동일](https://www.db-fiddle.com/f/h6i8x46q/0)

PostgreSQL 13 및 Beyond

PostgreSQL 13부터 WITH TIES 절이 정식으로 추가되었습니다. 이 절은 원하는 동작을 달성하기 위해 LIMIT 절과 함께 직접 사용할 수 있습니다.

SELECT *
FROM   tablename
ORDER BY nums DESC
LIMIT 3 WITH TIES;

이것은 원하는 대로 상위 3개 행을 취하고 다음을 포함하여 {10, 9, 8, 8}을 반환합니다. 세 번째 행과 연결되는 추가 8행.

위 내용은 PostgreSQL에서 SQL Server의 TOP n WITH TIES를 시뮬레이션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.