首页 > 数据库 > mysql教程 > 如何在 SQL 中分配分区组内的连续行号?

如何在 SQL 中分配分区组内的连续行号?

DDD
发布: 2024-12-22 12:27:15
原创
696 人浏览过

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
登录后复制

Pos 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板