Виберіть номер рядка в postgres


102

Як вибрати номер рядка в postgres.

Я спробував це:

select
    row_number() over (ORDER BY cgcode_odc_mapping_id)as rownum,
    cgcode_odc_mapping_id
  from access_odc.access_odc_mapping_tb
  order by cgcode_odc_mapping_id

і отримала цю помилку:

ПОМИЛКА: помилка синтаксису на рівні "біля"
РЯДКА 1: виберіть рядок_ число () над (ЗАМОВИТИ cgcode_odc_mapping_id) як

Я перевірив ці сторінки: Як відобразити номери рядків у запиті PostgreSQL?


Це мій запит:

 select row_number() over (ORDER BY cgcode_odc_mapping_id)as rownum,cgcode_odc_mapping_id from access_odc.access_odc_mapping_tb order by cgcode_odc_mapping_id 

це помилка:

ПОМИЛКА: помилка синтаксису на "або" над "LINE 1": виберіть row_number () over (ORDER BY cgcode_odc_mapping_id) як


3
Not Workingне говорить нам нічого, що ми можемо допомогти. Надайте, будь ласка, повідомлення про помилки та / або будь-яку іншу відповідну інформацію. Також вкажіть версію PostgreSQL, яку ви використовуєте.
MatBailie


1
Як здогадується, він не працює, оскільки ви намагаєтесь використовувати віконні функції на старій версії PostgreSQL, яка не підтримує їх.
Крейг Рінгер

2
Немає версії PostgreSQL 1.8.4.
kgrittn

1
Будь ласка, опублікуйте вихід select version()- версії 1.8 немає (і ніколи не була)
a_horse_with_no_name

Відповіді:


178
SELECT tab.*,
    row_number() OVER () as rnum
  FROM tab;

Ось відповідний розділ у документах.

PS Це, власне, цілком відповідає відповіді у згаданому питанні.


18
Ви повинні також вказати порядок в OVERреченні: OVER (ORDER BY id). Інакше замовлення не гарантується.
AlexM

3
@pumbo Appears row_number () повертає "номер рядка набору результатів" (тобто завжди 1 2 3 4 ... якщо ви вказали over ()), однак якщо у вас є зовнішній запит, переупорядкуйте впорядкування результатів курсу ref: stackoverflow.com/a / 3397149/32453 коментарі
rogerdpack
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.