복붙노트

[SQL] TOP에 대한 N 타이 PostgreSQL의 상당 : LIMIT "관계와?"

SQL

TOP에 대한 N 타이 PostgreSQL의 상당 : LIMIT "관계와?"

나는 SQL 서버에서이 비슷한 찾고 있어요 :

SELECT TOP n WITH TIES FROM tablename

나는 PostgreSQL을에 LIMIT에 대해 알고 있지만, 위의 존재에 해당합니까? 나는 그것이 나를 위해 별도의 쿼리 각 시간을 절약하는 것처럼 그냥 궁금 해요.

내가 속성 nums있는 테이블 번호가있는 경우 : {10, 9, 8, 8, 2}. 내가 좋아하는 뭔가를하고 싶지 :

SELECT nums FROM Numbers ORDER BY nums DESC LIMIT *with ties* 3

가 다른 하나를 묶어 이후 반환한다 {10, 9, 8, 8}는 상위 3 플러스 추가 8 걸리기 때문에.

해결법

  1. ==============================

    1.SQL Server의이 같은 PostgreSQL을에는 WITH TIES 절은 없다. PostgreSQL의에서 나는 TOP n에 타이로이를 대체 할 것입니다 .. ORDER BY <무언가>

    SQL Server의이 같은 PostgreSQL을에는 WITH TIES 절은 없다. PostgreSQL의에서 나는 TOP n에 타이로이를 대체 할 것입니다 .. ORDER BY <무언가>

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

    명확하게하기 위해, 순위는 () (너무 많은 행을 반환) DENSE_RANK ()가 잘못된 것, 권리입니다. (링크 위에서)는 SQL Server 문서에서이 견적을 고려 :

    과의 관계의 작업은 상단에 N ORDER BY 절에 의해 정의 된 마지막 행의 모든 ​​피어를 포함하는 것입니다. 순위는 () 동일한 결과를 제공합니다.

    확인하려면, 내가 SQL 서버와 테스트, 여기에 라이브 데모입니다. 그리고 여기에 더 편리한 SQLfiddle이다.

  2. ==============================

    2.이 시도:

    이 시도:

    출력 : 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
    
  3. from https://stackoverflow.com/questions/9629953/postgresql-equivalent-for-top-n-with-ties-limit-with-ties by cc-by-sa and MIT license