TOP n WITH TIES에 해당하는 PostgreSQL:"관계 포함"을 제한하시겠습니까?
-
09-12-2019 - |
문제
SQL Server에서 이와 비슷한 것을 찾고 있습니다.
SELECT TOP n WITH TIES FROM tablename
나는 대해 알고있다 LIMIT
PostgreSQL에서는 위와 동등한 것이 존재합니까?매번 추가 쿼리를 저장하므로 궁금합니다.
테이블이 있으면 Numbers
속성이 있는 nums
: {10, 9, 8, 8, 2}
.나는 다음과 같은 일을 하고 싶다:
SELECT nums FROM Numbers ORDER BY nums DESC LIMIT *with ties* 3
반환되어야합니다 {10, 9, 8, 8}
왜냐하면 상위 3개에 추가 항목이 필요하기 때문입니다. 8
왜냐하면 다른 쪽과 연결되어 있기 때문입니다.
해결책
없다 WITH TIES
조항 포스트그레SQL 거기에 있는 것처럼 SQL 서버.
PostgreSQL에서는 이것을 다음으로 대체합니다. 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;
확실하게, rank()
맞아요, dense_rank()
잘못된 것입니다(너무 많은 행을 반환함).
위 링크의 SQL Server 문서에서 다음 인용문을 고려해보세요.
예를 들어 expression이 5로 설정되었지만 2개의 추가 행이 5행의 ORDER BY 열 값, 결과 집합에는 7이 포함됩니다. 행.
직업 WITH TIES
마지막 행의 모든 피어를 맨 위에 포함시키는 것입니다. N 에 의해 정의된 대로 ORDER BY
절. rank()
똑같은 결과를 제공합니다.
확인하기 위해 SQL Server로 테스트했습니다. 여기에 라이브 데모.
그리고 여기가 더 편해요 SQLfiddle.
다른 팁
이 시도:
산출:10, 9, 8, 8
with numbers (nums) as (
values (10), (9), (8), (8), (2)
)
SELECT nums FROM Numbers
WHERE nums in (SELECT DISTINCT nums FROM Numbers ORDER BY nums DESC LIMIT 3)
ORDER BY nums DESC
산출:10,10,9,8,8
with numbers (nums) as (
values (10), (9), (8), (8), (2), (10)
)
SELECT nums FROM Numbers
WHERE nums in (SELECT DISTINCT nums FROM Numbers ORDER BY nums DESC LIMIT 3)
ORDER BY nums DESC
제휴하지 않습니다 StackOverflow