首页 >数据库 >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 (分区...)
  • MySQL 8.0 : ROW_NUMBER() OVER (分区作者...)
  • MariaDB 10.2 : ROW_NUMBER() 超过(分区...)
  • SQLite 3.25 : ROW_NUMBER() 超过(分区...)

示例查询

考虑以下示例表,其中包含按 CODE 列分组的元组:

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

要按顺序对每个 CODE 组中的行进行编号,可以使用以下查询:使用:

SELECT
    CODE,
    ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 AS C_NO,
    NAME
FROM
    MyTable;

输出

查询将生成以下输出,每个 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

注意:

ROW_NUMBER()函数默认从1开始编号。为了与所需的输出保持一致,表达式 ROW_NUMBER() OVER (PARTITION BY ...) - 1 用于将编号从基于 1 的编号转换为基于 0 的编号。

以上是如何在 SQL 中对组内的行进行顺序编号?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn