8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 SQL 中按键组按顺序编号行?

jaundiced 2月前

22 0

SQL 中是否有一种方法可以按键组按顺序添加行号?假设一个表包含任意 (CODE,NAME) 元组。示例表:CODE NAME ---- ----A AppleA AngelA ArizonaB...

按键组按 顺序添加行号

假设有一张包含任意 (CODE,NAME) 元组的表。示例表:

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

使用 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

谢谢,

帖子版权声明 1、本帖标题:在 SQL 中按键组按顺序编号行?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由jaundiced在本站《mysql》版块原创发布, 转载请注明出处!
最新回复 (0)
    • SQL 服务器
    • 甲骨文
    • Postgres
    • Sybase
    • MySQL 8.0+
    • MariaDB 10.2+
    • SQLite 3.25+

    这涵盖了大多数基础。

    SELECT
        CODE,
        ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO,
        NAME
    FROM
        MyTable
    
  • MySQL(可能还有大多数其他数据库):

    select g.CODE
         , count(*)-1 as C_NO
         , g.NAME
    from MyTable as g
      left join MyTable as o
        on g.CODE = o.CODE
          and g.NAME >= o.NAME
    group by g.CODE
           , g.NAME;
    

    特定于 MySQL:

    DELIMITER $$
    CREATE PROCEDURE NumberRowsByGroup()
    BEGIN
      SET  @code := 0;
      SET  @num := 0;
      SELECT CODE, C_NO, NAME FROM
        ( select q.CODE
               , q.NAME
               , @num := IF(q.CODE = @code, @num + 1, 0) as C_NO
               , @code := q.CODE as previous
          from yourTable q
          order by CODE
                 , NAME
        ) as p
      ;
    END$$
    DELIMITER ;
    

    然后,我们可以调用:

    CALL NumberRowsByGroup();
    

    根据 xaprb.com/blog 帖子: how-to-number-rows-in-mysql ,第二种速度更快。

返回
作者最近主题: