【问题标题】:mysql row number is not working properly with ordermysql 行号无法正常使用订单
【发布时间】:2019-01-23 16:32:24
【问题描述】:

我有一个包含以下表格的商店数据库:

1 - 提供者(ProviderID,Name,Country)

2 - 产品(ProductID,ProviderID,ProductPrice)

3 - 命令(CommandID,ProductID,ProductQuantity,CommandDate)

我做了一个查询,按年计算收益

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

这是输出:

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

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

但我没有得到我想要的

似乎顺序正在影响行号。我希望它从 1 开始。按柜台订购不是一种选择,因为我需要按年订购。

这就是我想要的样子:

1 2014 1863
2 2015 889
3 2016 2626
...

【问题讨论】:

    标签: mysql sql auto-increment rowid


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多