2015-07-08 4 views
3

Рассмотрим следующий SQL запрос и ответ:PostgreSQL: Перечислите SQL результат запроса

CREATE TEMPORARY TABLE dreams (name text, type text); 
INSERT INTO dreams VALUES ('Monkey', 'nice'); 
INSERT INTO dreams VALUES ('Snake', 'Not nice'); 
INSERT INTO dreams VALUES ('Donkey', 'nice'); 
INSERT INTO dreams VALUES ('Bird', 'nice'); 

SELECT name from dreams WHERE type='nice' ORDER BY name; 
    name 
-------- 
Bird 
Donkey 
Monkey 
(3 rows) 

Я хотел бы перечислить результаты по порядку появления, независимо от каких-либо существующих идентификаторов, для удобства. Ожидаемый результат должен быть что-то а-ля:

SELECT <magic_enumeration>, name from dreams WHERE type='nice' ORDER BY name; 

magic_enumeration | name 
-------------------+-------- 
1     | Bird 
2     | Donkey 
3     | Monkey 
(3 rows)  

Любые идеи, как перечислить результат запроса на порядок появления?

ответ

5

Попробуйте использовать row_number, что функции кадрирования

SELECT row_number() OVER (ORDER BY name) sid, <-- magic enumeration! 
     name 
    FROM dreams 
    WHERE type='nice' 
    ORDER BY name; 
+1

вам нужно 'над (заказ по имени)', чтобы получить правильную нумерацию. –

+0

'SELECT row_number OVER (ORDER BY name) magic_enumeration, name ...' возвращает 'ERROR: синтаксическая ошибка в или около" OVER "'. –

+1

'row_number()' является функцией, требуется '()' - исправление вашего ответа. –

Смежные вопросы