首頁 >資料庫 >mysql教程 >如何在 PostgreSQL 查詢中產生連續行號?

如何在 PostgreSQL 查詢中產生連續行號?

Susan Sarandon
Susan Sarandon原創
2024-12-28 00:53:14902瀏覽

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>: 從中取得資料的表

範例:

要顯示按id 欄位排序的名為foo_tbl 的表的觀察數,請使用以下查詢:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn