我知道这个问题之前也被问过,但是我尝试了所有这些问题,但是没有人为我工作,因为我的查询有点不同,因为它在查询中有sum函数需要得到总和以及总和来获得等级用户。
所以我的问题是如何找到单个用户的排名我的表是这样的:
目前我正在尝试这个查询,但这给了我所有用户。
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
首先,当您从多个表中查询数据时,应该使用INNER JOIN。另外,我认为ORDER BY别名是不可能的,你必须重复别名的操作。如果你想拥有单个用户的等级,你必须添加一个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
因此,您需要整个数据集才能知道此人的排名。它有点难看,但你可以嵌套来获得排名,然后从排名数据集中选择你感兴趣的人: -
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'