Как использовать функцию ROW_NUMBER () mysql после ORDER BY? - PullRequest
1 голос
/ 29 марта 2020
SELECT user.id
      ,user.emp_id
      ,user.name,COUNT(transfer.record_name) AS current_rank
      ,ROW_NUMBER() OVER () AS count
FROM transfer AS transfer
LEFT JOIN users AS user ON user.emp_id= transfer.user_id
WHERE transfer.lobs= 0
AND transfer.shift_date = '2020-03-27'
GROUP BY user.emp_id
ORDER BY current_rank DESC

Этот запрос даст мне результат, подобный следующему:

user.id|   user.emp_id|   user.name|   current_rank|   count
25           1234          test1           4             4
30           4321          test2           2             2
18           5678          test3           1             1
12           8765          test4           1             3

Моя цель - сначала использовать ORDER BY DES C, чтобы я мог заказать current_rank и * Столбец 1006 * должен иметь количество:

user.id|   user.emp_id|   user.name|   current_rank|   count
25           1234          test1           4             1
30           4321          test2           2             2
18           5678          test3           1             3
12           8765          test4           1             4

Как я могу использовать функцию ROW_NUMBER () после того, как я ЗАКАЗАЛ свой столбец current_rank?

Спасибо за любую помощь. Я буду признателен за это.

1 Ответ

3 голосов
/ 29 марта 2020

Результат ROW_NUMBER() не зависит от сортировки в запросе.

Вместо этого он принимает параметр ORDER BY в своем предложении OVER: без него порядок ROW_NUMBER() равен undefined , что означает, что база данных может свободно упорядочивать строки как нравится. Вы можете заметить, что один и тот же порядок используется при последовательном выполнении, но база данных не гарантирует этого.

Итак, добавьте ORDER BY к оконной функции:

ROW_NUMBER() OVER (ORDER BY COUNT(transfer.record_name) DESC) AS count
...