복붙노트

[SQL] 어떻게 PostgreSQL의 쿼리에서 행 번호를 표시합니다?

SQL

어떻게 PostgreSQL의 쿼리에서 행 번호를 표시합니다?

나는 PostgreSQL의 쿼리에 의해 반환 된 각 레코드에 대한 관찰 번호를 표시하고 싶습니다.

이 기능을 수행 할 수 있습니다 나는 8.4 윈도 기능으로 생각합니다.

해결법

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

    1.

    select   row_number() over (order by <field> nulls last) as rownum, *
    from     foo_tbl
    order by <field>
    

    순서가 필요하지 않은 경우,이 대답은 간단 할 수있다 :

    select row_number() over(), *  -- notice: no fields are needed
    from   foo_tbl
    

    개념의 SQL 바이올린 증명

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

    2.이전 8.4 버전 :

    이전 8.4 버전 :

    SELECT    count(*) rownum, foo.*
    FROM      datatable foo
    JOIN      datatable bar
              ON (foo.pk_id <= bar.pk_id)
    GROUP BY  foo.pk_id, foo.a, foo.b
    ORDER BY  rownum
    ;
    
    -- if there isn't a single unique/primary key field, you can concatenate fields
    --    Example: ON (foo.a||foo.b||foo.c <= bar.a||bar.b||bar.c)
    

    이 사람을 도움이되기를 바랍니다.

    개념의 SQL 바이올린 증명

    나는 모든 비용이 피할 수 있지만, 후대를 위해 그것을 포함하고 싶어하는 것이 좋습니다. 그것은 다소 비싼 내가 잘 확장되지 않습니다 상상하지만, 기본 키 테이블 (나쁜 DB 설계)에 존재하지 않는 경우, 옵션은 제한 될 수 있습니다. 이들 대부분의 경우에서, 포인트는 애플리케이션 계층에 넘버링을 수행하는 것이다.

    -- Based on basic table w/o primary key
    -- CREATE TABLE names ( name as text );
    
    SELECT num, name[num]
    FROM (
      select generate_series( 1, (select count(*) from names) ) as num
    ) _nums,
    (
      select array_agg(name) as name from names
    ) _names
    

    개념의 SQL 바이올린 증명

    이 확장되지 않는 이유 :

  3. from https://stackoverflow.com/questions/3397121/how-to-show-row-numbers-in-postgresql-query by cc-by-sa and MIT license