ホームページ >データベース >mysql チュートリアル >PostgreSQL クエリで連続した行番号を生成するにはどうすればよいですか?

PostgreSQL クエリで連続した行番号を生成するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-28 00:53:14907ブラウズ

How to Generate Sequential Row Numbers in PostgreSQL Queries?

PostgreSQL クエリでの連続行番号の生成

PostgreSQL クエリを使用する場合、返された各レコードの観測番号を表示することが望ましい場合があります。 。 PostgreSQL 8.4 以降のバージョンでは、強力なウィンドウ関数 row_number() を使用してこれを実現できます。

構文:

連続した行番号を生成するには、次のコマンドを使用します。構文:

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

パラメータ:

  • : 行の順序付けに使用するフィールド。
  • < ;table_name>: データの取得元のテーブル

例:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。