依群組自動對表中的行進行編號
本指南示範如何自動為表中群組內的行分配序號,特別針對 address_history
表,其中分組基於 person_id
列。雖然存在多種方法,但我們將重點關注使用串行列和視窗函數。
方法1:使用序列列(建議)
最直接的方法是利用序列或 IDENTITY 欄位。 這會自動產生唯一的連續編號。
<code class="language-sql">CREATE TABLE address_history ( address_history_id SERIAL PRIMARY KEY, person_id INT NOT NULL REFERENCES people(id), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, previous_address TEXT );</code>
SERIAL
列 (address_history_id
) 自動遞增,為每行提供所需的順序編號。
方法 2:使用視窗函數(替代)
如果序列列不可行,視窗函數可以提供解決方案。此方法建立一個新增連續數字列的視圖。
<code class="language-sql">CREATE VIEW address_history_nr AS SELECT *, ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY address_history_id) AS adr_nr FROM address_history;</code>
這會產生一個視圖 (address_history_nr
),其中包含一個附加列 (adr_nr
),每個 person_id
群組內都有有序號。 此檢視可作為查詢中表格的替代品。
重要提示:
TIMESTAMP WITH TIME ZONE
作為時間戳字段,以便更好地處理時區。 previous_address
。 保留目前和以前的地址可能會導致資料不一致。 此方法可確保群組內有效率且準確的順序編號,進而增強資料管理和查詢效能。
以上是如何根據分組為表中的行分配序號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!