как найти индекс (id) общего столбца в MySQL - PullRequest
0 голосов
/ 14 января 2019

У меня есть таблица с именем рейтинга, как это.

a busy cat

Я пишу запрос вот так

SELECT user_id, sum(score) as score
FROM quiz_rashad.rating
group by user_id
order by score desc

тогда как мне получить индекс рейтинга 12-го пользователя? Спасибо за помощь.

Ответы [ 2 ]

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

Предполагается, что «12-й пользователь» означает пользователя с идентификатором 12:

В MySQL 8.0+ вы можете использовать dense_rank().

SELECT x.rating_index
       FROM (SELECT r.user_id,
                    dense_rank() OVER (ORDER BY sum(r.score) DESC) rating_index
                    FROM quiz_rashad.rating r
                    GROUP BY r.user_id) x
       WHERE x.user_id = 12;

Edit:

Для MySQL 5.7 вы должны использовать подзапросы, получая различное количество общих баллов, превышающее или равное общему баллу для пользователя с идентификатором 12.

SELECT count(DISTINCT x.score) rating_index
       FROM (SELECT r.user_id,
                    sum(r.score) score
                    FROM quiz_rashad.rating r
                    GROUP BY r.user_id) x
       WHERE x.score >= (SELECT sum(r.score)
                                FROM quiz_rashad.rating r
                                WHERE r.user_id = 12)
0 голосов
/ 14 января 2019

Мы можем попробовать использовать LIMIT с OFFSET здесь:

SELECT user_id, SUM(score) AS score
FROM quiz_rashad.rating
GROUP BY user_id
ORDER BY score DESC
LIMIT 1 OFFSET 11;

Этот ответ предполагает, что вам действительно нужна запись с двенадцатым рангом. Также предполагается, что ни один из двух пользователей не будет привязан к одному и тому же счету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...