Heim >Datenbank >MySQL-Tutorial >Wie generiert man sequentielle Zeilennummern in PostgreSQL-Abfragen?

Wie generiert man sequentielle Zeilennummern in PostgreSQL-Abfragen?

Susan Sarandon
Susan SarandonOriginal
2024-12-28 00:53:14907Durchsuche

How to Generate Sequential Row Numbers in PostgreSQL Queries?

Generieren fortlaufender Zeilennummern in PostgreSQL-Abfragen

Bei der Arbeit mit PostgreSQL-Abfragen kann es wünschenswert sein, die Beobachtungsnummer für jeden zurückgegebenen Datensatz anzuzeigen . In PostgreSQL 8.4 und späteren Versionen kann dies mit der leistungsstarken Fensterfunktion row_number() erreicht werden.

Syntax:

Um sequentielle Zeilennummern zu generieren, verwenden Sie Folgendes Syntax:

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

Parameter:

  • : Das Feld, nach dem die Zeilen sortiert werden sollen.
  • < ;table_name>: Die Tabelle, aus der die Daten stammen ausgewählt.

Beispiel:

Um die Beobachtungszahlen für eine Tabelle mit dem Namen foo_tbl sortiert nach dem ID-Feld anzuzeigen, verwenden Sie die folgende Abfrage:

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

Vereinfachte Syntax:

Wenn die Reihenfolge nicht stimmt Bei Bedarf kann die Abfrage vereinfacht werden, indem die order by-Klausel weggelassen wird:

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

Dadurch werden fortlaufende Zeilennummern ohne spezifische Reihenfolge generiert.

Proof of Concept:

Der folgende SQL Fiddle-Proof of Concept demonstriert die Verwendung der row_number()-Funktion zum Generieren fortlaufender Zeilennummern:

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}")

Das obige ist der detaillierte Inhalt vonWie generiert man sequentielle Zeilennummern in PostgreSQL-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn