首頁 >資料庫 >mysql教程 >如何在 SQL 中對群組內的行進行順序編號?

如何在 SQL 中對群組內的行進行順序編號?

Susan Sarandon
Susan Sarandon原創
2024-12-27 21:22:10187瀏覽

How to Sequentially Number Rows within Groups in SQL?

在SQL 中按鍵分組對行進行順序編號

在SQL 中對按特定鍵分組的行進行順序編號是常見的需求數據處理。為了實現這一目標,各種 SQL 資料庫提供了本機函數和技術,允許在每個鍵組內進行高效且準確的行編號。

在不同資料庫中的實作

許多流行的SQL資料庫提供了用於連續行編號的內建函數或擴充:

  • SQL伺服器: ROW_NUMBER() OVER(分區...)
  • Oracle: ROW_NUMBER() OVER(分區...)
  • Postgres: ROW_NUMBER() OVER(分區依據...)
  • Sybase: ROW_NUMBER() OVER (分區...)
  • R
  • MySQL 8.0 : R
  • MySQL 8.0 :
  • MariaDB 10.2 :
  • ROW_NUMBER() 超過(分割...)
  • SQLite 3.25 :
ROW_NUMBER() 超過(分割區...)

CODE | NAME
------|------
A     | Apple
A     | Angel
A     | Arizona
B     | Bravo
C     | Charlie
C     | Cat
D     | Dog
D     | Data
D     | Down
D     | Doppler
範例查詢

SELECT
    CODE,
    ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 AS C_NO,
    NAME
FROM
    MyTable;
考慮以下範例表,其中包含按 CODE 列分組的元組:

要依序對每個 CODE群組中的行進行編號,可以使用以下查詢:使用:

CODE | C_NO | NAME
------|------|------
A     | 0    | Apple
A     | 1    | Angel
A     | 2    | Arizona
B     | 0    | Bravo
C     | 1    | Charlie
C     | 0    | Cat
D     | 0    | Dog
D     | 1    | Data
D     | 2    | Down
D     | 3    | Doppler
輸出

查詢將產生以下輸出,每個CODE 組中的行按順序編號:

注意:ROW_NUMBER()函數預設從1開始編號。為了與所需的輸出保持一致,表達式 ROW_NUMBER() OVER (PARTITION BY ...) - 1 用於將編號從基於 1 的編號轉換為基於 0 的編號。

以上是如何在 SQL 中對群組內的行進行順序編號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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