Как я могу добавить ранг или номер строки в результат запроса?

#mysql #sql

#mysql #sql

Вопрос:

У меня есть запрос ниже, который возвращает результат, но мне нужно добавить номер строки или ранг. Рабочий запрос следующий

 SELECT  user_id, CAST(SUM(total_score) / 100 AS DECIMAL(10,2)) AS points
FROM users_games 
GROUP BY user_id
HAVING points > 500 AND points < 5000
ORDER BY points DESC
 

Я попытался выполнить следующие действия для получения номера строки и ранга

 SET @rank=0; 
SELECT @rank:=@rank 1, user_id, CAST(SUM(total_score) / 100 AS DECIMAL(10,2)) AS points
FROM users_games
GROUP BY user_id
HAVING points > 500 AND points < 5000
ORDER BY points DESC;
SELECT @rank;
 

Комментарии:

1. @Andreas Я думаю, что mysql верен, остальные я добавил по ошибке

2. Какая у вас версия MySQL?

3. @forpas Я нашел это Database client version: libmysql - mysqlnd 7.4.4

4. Выполните select version(); , чтобы получить версию MySQL.

5. @forpas да, я понял, это 10.4.11-MariaDB

Ответ №1:

В более старых версиях MySQL и MariaDB вы можете использовать переменные:

 SELECT (@rn := @rn   1), ug.*
FROM (SELECT  user_id, CAST(SUM(total_score) / 100 AS DECIMAL(10,2)) AS points
      FROM users_games 
      GROUP BY user_id
      HAVING points > 500 AND points < 5000
      ORDER BY points DESC
     ) ug CROSS JOIN
     (SELECT @rn := 0) params;
 

Комментарии:

1. Да, он работает, но он возвращает дублированную строку user_id

2. Я ищу уникальный идентификатор пользователя и суммирую все баллы для каждого пользователя

3. @AyazShah . , , Для этого запроса невозможно дублировать user_id s, потому что базовый запрос имеет . group by user_id Это означает, что на каждую строку приходится одна строка user_id .