代码之家  ›  专栏  ›  技术社区  ›  Amine Messaoudi

mysql auto row id无法正确处理订单

  •  -1
  • Amine Messaoudi  · 技术社区  · 7 年前

    我有一个存储数据库,其中包含以下表:

    1供应商 普罗维特里德 名称、国家)

    2产品 产品目录 ,providerid,产品价格)

    3命令 命令ID,产品ID ,产品数量,命令日期)

    我提出了一个按年计算收益的问题

    SELECT EXTRACT(YEAR FROM COMMAND_DATE) AS year, 
    SUM(PRODUCT_PRICE*PRODUCT_QUANTITY) AS gain
    FROM PRODUCT JOIN COMMAND ON PRODUCT.PRODUCT_ID=COMMAND.PRODUCT_ID
    GROUP BY year
    ORDER BY year
    

    这是输出:

    enter image description here

    现在我想像Oracle一样显示rowid,所以我使用了这个查询:

    SET @currentRow = 0;
    SELECT @currentRow := @currentRow + 1 AS counter,
    EXTRACT(YEAR FROM COMMAND_DATE) AS year,
    SUM(PRODUCT_PRICE*PRODUCT_QUANTITY) AS gain
    FROM PRODUCT JOIN COMMAND ON PRODUCT.PRODUCT_ID=COMMAND.PRODUCT_ID
    GROUP BY year
    ORDER BY year
    

    但我没有得到我想要的

    enter image description here

    似乎订单在某种程度上改变了柜台。我想从1开始。按计数器排序不是一个选项,因为我需要按年份排序。

    这就是我想要的:

    1 2014 1863
    2 2015 889
    3 2016 2626
    ...
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Gordon Linoff    7 年前

    group by ,需要子查询:

    SELECT (@currentRow := @currentRow + 1) AS counter, y.*
    FROM (SELECT EXTRACT(YEAR FROM COMMAND_DATE) AS year,
                 SUM(PRODUCT_PRICE*PRODUCT_QUANTITY) AS gain
          FROM PRODUCT JOIN
               COMMAND
               ON PRODUCT.PRODUCT_ID = COMMAND.PRODUCT_ID
          GROUP BY year
          ORDER BY year
         ) y CROSS JOIN
         (SELECT @currentRow := 0) params;
    

    或者,你可以使用 ROW_NUMBER() OVER (ORDER BY YEAR) ,如果您使用的是MySQL8+。