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:
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!