PostgreSQL クエリでの連続行番号の生成
PostgreSQL クエリを使用する場合、返された各レコードの観測番号を表示することが望ましい場合があります。 。 PostgreSQL 8.4 以降のバージョンでは、強力なウィンドウ関数 row_number() を使用してこれを実現できます。
構文:
連続した行番号を生成するには、次のコマンドを使用します。構文:
select row_number() over (order by <field> nulls last) as rownum, * from <table_name> order by <field>;
パラメータ:
例:
foo_tbl という名前のテーブルの観測値を ID フィールド順に表示するには、次のクエリを使用します。
select row_number() over (order by id nulls last) as rownum, * from foo_tbl order by id;
簡略化構文:
順序付けが必要ない場合は、order by 句を省略してクエリを簡略化できます:
select row_number() over(), * -- no fields are needed from foo_tbl;
これにより、特定の順序付けを行わずに連続した行番号が生成されます。
概念実証:
次の SQL Fiddle の概念実証では、連続する行番号を生成する row_number() 関数の使用法を示します:
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}")
以上がPostgreSQL クエリで連続した行番号を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。