#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
.