ホームページ >データベース >mysql チュートリアル >SQLでパーティション化されたグループ内に連続した行番号を割り当てる方法は?

SQLでパーティション化されたグループ内に連続した行番号を割り当てる方法は?

DDD
DDDオリジナル
2024-12-22 12:27:15757ブラウズ

How to Assign Sequential Row Numbers Within Partitioned Groups in SQL?

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

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