MySQL номер строки не работает должным образом с заказом - PullRequest
0 голосов
/ 23 января 2019

У меня есть база данных магазина со следующими таблицами:

1 - поставщик ( ProviderID , имя, страна)

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

Это вывод:

enter image description here

Теперь я хочу отобразить номер строки так же, как 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

Но я не получаю то, что хочу

enter image description here

Кажется, порядок влияет на номер строки.Я хочу, чтобы это началось с 1. Заказ по счетчику не вариант, потому что мне нужно заказывать по годам.

Вот как я хочу:

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

1 Ответ

0 голосов
/ 23 января 2019

С 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), если вы используете MySQL 8+.

...