MySQL: Auto increment temporary column in select statement

前端 未结 3 1321
名媛妹妹
名媛妹妹 2020-12-07 12:27

How do I create and auto increment a temporary column in my select statement with MySQL?

Here is what I have so far:

SET @cnt = 0;
SELECT
    (@cnt          


        
相关标签:
3条回答
  • 2020-12-07 13:10

    Try this:

    SET @rownr=0;
    SELECT @rownr:=@rownr+1 AS rowNumber, rowID
      FROM myTable
      WHERE CategoryID = 1
    

    In modern versions of MySQL you can use MySQL Window: http://www.mysqltutorial.org/mysql-window-functions/mysql-row_number-function/

    Example:

    SELECT  ROW_NUMBER() OVER (  ORDER BY productName  ) row_num, 
            productName, msrp 
    FROM   products ORDER BY   productName;
    
    0 讨论(0)
  • 2020-12-07 13:11

    This will give you a consecutive row number with 3.

    SELECT
        (@cnt := @cnt + 1) AS rowNumber,
        t.rowID
    FROM myTable AS t
      CROSS JOIN (SELECT @cnt := 0) AS dummy
    WHERE t.CategoryID = 1
    ORDER BY t.rowID ;
    

    Result

    | ROWNUMBER | ROWID |
    ---------------------
    |         1 |     1 |
    |         2 |    25 |
    |         3 |    33 |
    |         4 |   150 |
    0 讨论(0)
  • 2020-12-07 13:29

    But what if you have a group by in the select statement? the counting will be off.

    For such cases, the only solution I found is nesting select:

    SELECT (@cnt := @cnt + 1) AS rowNumber, t.*
    from
    (select
        t.rowID
    FROM myTable 
    WHERE CategoryID = 1
    ORDER BY rowID) t
    CROSS JOIN (SELECT @cnt := 0) AS dummy
    
    0 讨论(0)
提交回复
热议问题