web-dev-qa-db-fra.com

Rownum en postgresql

Existe-t-il un moyen de simuler rownum dans postgresql?

66
danidacar

Postgresql> 8.4 

SELECT 
    row_number() OVER (ORDER BY col1) AS i, 
    e.col1, 
    e.col2, 
    ... 
FROM ... 
78
baklarz2048

Je viens de tester dans Postgres 9.1 une solution proche d'Oracle ROWNUM:

select row_number() over() as id, t.*
from information_schema.tables t;
21

Postgresql a limite.

Code d'Oracle:

select *
from
  tbl
where rownum <= 1000;

idem dans le code de Postgresql: 

select *
from
  tbl
limit 1000
11
Buka

Si vous voulez juste qu'un numéro revienne, essayez ceci.

create temp sequence temp_seq;
SELECT inline_v1.ROWNUM,inline_v1.c1
FROM
(
select nextval('temp_seq') as ROWNUM, c1 
from sometable
)inline_v1;

Vous pouvez ajouter une commande au code SQL inline_v1 afin que votre ROWNUM ait une signification séquentielle pour vos données.

select nextval('temp_seq') as ROWNUM, c1 
from sometable
ORDER BY c1 desc;

Peut-être pas le plus rapide, mais c'est une option si vous en avez vraiment besoin.

9
Kuberchaun

Postgresql n'a pas d'équivalent de ROWNUM ..__ d'Oracle. Vous pouvez souvent obtenir le même résultat en utilisant LIMIT et OFFSET dans votre requête.

3
Sachin Shanbhag

Si vous avez une clé unique, vous pouvez utiliser COUNT(*) OVER ( ORDER BY unique_key ) as ROWNUM

SELECT t.*, count(*) OVER (ORDER BY k ) ROWNUM 
FROM yourtable t;

| k |     n | rownum |
|---|-------|--------|
| a | TEST1 |      1 |
| b | TEST2 |      2 |
| c | TEST2 |      3 |
| d | TEST4 |      4 |

D&EACUTE;MO

1
Kaushik Nayak

utilisez la limite, avec le décalage pour choisir le numéro de ligne -1, donc si vous voulez obtenir le numéro 8, utilisez:

limite 1 offset 7

0
Lorenzo Zuluaga