在MySql中查询查询排名

问题描述 投票:-1回答:2

我知道这个问题之前也被问过,但是我尝试了所有这些问题,但是没有人为我工作,因为我的查询有点不同,因为它在查询中有sum函数需要得到总和以及总和来获得等级用户。

所以我的问题是如何找到单个用户的排名我的表是这样的:

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
mysql sql
2个回答
0
投票

首先,当您从多个表中查询数据时,应该使用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

0
投票

因此,您需要整个数据集才能知道此人的排名。它有点难看,但你可以嵌套来获得排名,然后从排名数据集中选择你感兴趣的人: -

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'
© www.soinside.com 2019 - 2024. All rights reserved.