Maison >base de données >tutoriel mysql >Comment générer des numéros de ligne séquentiels dans les requêtes PostgreSQL ?

Comment générer des numéros de ligne séquentiels dans les requêtes PostgreSQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-28 00:53:14902parcourir

How to Generate Sequential Row Numbers in PostgreSQL Queries?

Génération de numéros de lignes séquentiels dans les requêtes PostgreSQL

Lorsque vous travaillez avec des requêtes PostgreSQL, il peut être souhaitable d'afficher le numéro d'observation pour chaque enregistrement renvoyé . Dans PostgreSQL 8.4 et versions ultérieures, cela peut être réalisé à l'aide de la puissante fonction de fenêtrage row_number().

Syntaxe :

Pour générer des numéros de ligne séquentiels, utilisez ce qui suit syntaxe :

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

Paramètres :

  •  : le champ selon lequel les lignes doivent être classées.
  • < ;table_name> : La table à partir de laquelle les données sont sélectionné.

Exemple :

Pour afficher les numéros d'observation d'une table nommée foo_tbl classés par le champ id, utilisez la requête suivante :

select row_number() over (order by id nulls last) as rownum, *
from foo_tbl
order by id;

Syntaxe simplifiée :

Si la commande n'est pas nécessaire, la requête peut être simplifiée en omettant la clause order by :

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

Cela générera des numéros de ligne séquentiels sans aucun ordre spécifique.

Preuve de concept :

La preuve de concept SQL Fiddle suivante démontre l'utilisation de la fonction row_number() pour générer une ligne séquentielle numéros :

import sqlalchemy

# Create a test table
engine = sqlalchemy.create_engine('postgresql://postgres:my_password@localhost:5432/test_db')
metadata = sqlalchemy.MetaData()
table = sqlalchemy.Table('test_table', metadata,
    sqlalchemy.Column('id', sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column('name', sqlalchemy.String(255)),
    sqlalchemy.Column('score', sqlalchemy.Float),
)
metadata.create_all(engine)

# Insert some data into the table
insert_data = [
    {'id': 1, 'name': 'John', 'score': 90},
    {'id': 2, 'name': 'Jane', 'score': 85},
    {'id': 3, 'name': 'Bob', 'score': 95},
]
insert = table.insert().values(insert_data)
engine.execute(insert)

# Query the table with row numbers
select_query = sqlalchemy.select([
    sqlalchemy.func.row_number().over().label('rownum'),
    table.c.id,
    table.c.name,
    table.c.score,
]).order_by(table.c.id)
results = engine.execute(select_query).fetchall()

# Print the results
for result in results:
    print(f"Row {result.rownum}: {result.id}, {result.name}, {result.score}")

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn