문제

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top