web-dev-qa-db-fra.com

Comment afficher les numéros de ligne dans une requête PostgreSQL?

J'aimerais afficher le numéro d'observation de chaque enregistrement renvoyé par une requête PostgreSQL.

Je pense qu'en 8.4, les fonctions de fenêtrage peuvent exécuter cette capacité.

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

Si l'ordre n'est pas nécessaire, cette réponse peut également être simplifiée:

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

Pour les versions antérieures à 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)

J'espère que ça aide quelqu'un.

5
vol7ron