Найти ранг с запросом в MySql - PullRequest
0 голосов
/ 28 января 2019

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

Так что мой вопрос, как найти рейтинг для одного пользователя, моя таблица такова:

table image

в настоящее время я пытаюсь с этим запросом, но это дает мне все пользователи.

SELECT u.user_name as userName 
     , sum(taken_quiz_points) as totalPoints 
  FROM taken_quiz as q
     , users_app as u 
 WHERE q.taken_quiz_user_id = u.user_id  
 GROUP 
    BY taken_quiz_user_id 
 ORDER 
    BY totalPoints DESC

Ответы [ 2 ]

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

Итак, вам нужен весь набор данных, чтобы узнать рейтинг человека.Это немного некрасиво, но вы можете вложить, чтобы получить рейтинг, а затем выбрать из ранжированного набора данных интересующего вас человека: -

Select userName, user_rank from 

(Select userName,totalpoints ,dense_rank() OVER (Order by totalpoints desc) as user_rank

from (
SELECT u.user_name as userName ,sum(taken_quiz_points) as totalPoints 
FROM taken_quiz as q, users_app as u 
WHERE q.taken_quiz_user_id=u.user_id  GROUP BY user_name, 
taken_quiz_user_id) aa
) bb
where userName ='bob'
0 голосов
/ 28 января 2019

Прежде всего, вы должны использовать INNER JOIN при запросе данных из нескольких таблиц.Кроме того, я не думаю, что можно ЗАКАЗАТЬ по псевдониму, вы должны повторить операцию псевдонима.Если вы хотите иметь звание отдельного пользователя, вы должны добавить условие WHERE, например WHERE u.name = "toto" или что-то в этом роде.

В итоге вы должны получить следующее:

SELECT 
   u.user_name as userName ,
   sum(q.taken_quiz_points) as totalPoints 
FROM taken_quiz q 
INNER JOIN users_app u ON q.taken_quiz_user_id = u.user_id
WHERE u.name = "toto"  
GROUP BY q.taken_quiz_user_id 
ORDER BY sum(q.taken_quiz_points) DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...