SQL のパーティション化されたグループ内の行に連続した番号を付ける
質問:
どのように割り当てることができますか特定の属性をパーティション化として使用する、SQL テーブル内の各キー グループ内の連続する行番号要素?
キー グループによるパーティション化:
目的は、指定されたキー列または列の組み合わせの一意の値ごとに行番号を順番にインクリメントすることです。たとえば、テーブルに (CODE, NAME) のタプルが含まれている場合、以下に示すように、同じ CODE 値を持つ行に連続番号を割り当てる必要があります。
元のテーブル:
CODE | NAME |
---|---|
A | Apple |
A | Angel |
A | Arizona |
B | Bravo |
C | Charlie |
C | Cat |
D | Dog |
D | Doppler |
D | Data |
D | Down |
連続行番号でパーティション化された望ましい結果コード:
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 |
実装:
複数の SQL 言語が ROW_NUMBER() OVER () 分析関数を通じてこの機能をサポートしています:
SQLサーバー:
SELECT CODE, ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO, NAME FROM MyTable
Oracle:
SELECT CODE, RANK() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO, NAME FROM MyTable
位置tgres:
SELECT CODE, ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO, NAME FROM MyTable
Sybase:
SELECT CODE, ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO, NAME FROM MyTable
MySQL 8.0 :
SELECT CODE, ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO, NAME FROM MyTable
MariaDB 10.2 :
SELECT CODE, ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO, NAME FROM MyTable
SQLite 3.25 :
SELECT CODE, ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO, NAME FROM MyTable
これらのクエリを使用すると、次のことができます。 SQL テーブルの各キー グループ内で連続した行番号を効果的に割り当てます。
以上がSQLでパーティション化されたグループ内に連続した行番号を割り当てる方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。