MySQL - 如何消除排行榜中的重复用户?

MySQL - How to eliminate duplicated users in a Ranking?

我的网站上有一个排名 - 有 2 个表:USERS 和 ANSWERS。

答案 TABLE 是:

> ======================
> QUIZID ----- USERID ---- TOTALPOINTS ---- TYPE1 -- TYPE2 - TOTALTIME
>   100   ------  22 -------    100      ----- 30 ---- 70 ----  300
>   100  -------- 45 -------    80      ------ 40 -----40 ----- 280
>   101 --------- 45 -------    60 ------------30 -----30 ------200

TYPE1 和 TYPE2 是在不同类别的问题中累积的分数(如 "Sales" 和 "Marketing") - 如果我们有平局,TYPE1 中的大多数分数获胜.. TYPE2 中的大多数分数(完整的 table 有 11 种类型)..

此处:用户 22 有 100 点 - 用户 45 有 140 点。

您可以为每个用户做 1 个以上的回答 - 因为我们有很多问题。

我的问题:

USER TABLE 是:

========================
USERID ------ NAME
  22   ------ JOHN
  22 -------- JOHN
  22 -------- JOHN
  45 -------- MARK
=========================

某些用户在用户 table 上重复。

我正在使用这个 SELECT 来创建排名(前 50):

SELECT users.userid, 
       users.name, 
       Sum(totalpoints), 
       Sum(type1), 
       Sum(type2), 
       Min(totaltime) 
FROM   answers 
       INNER JOIN users 
               ON users.userid = answers.userid 
WHERE  totalpoints > 0 
GROUP  BY users.userid 
ORDER  BY Sum(totalpoints) DESC, 
          Sum(type1) DESC, 
          Sum(type2) DESC, 
          Min(totaltime) 
LIMIT  50 

但是..

我有以下结果:

USERID - NAME - TOTALPOINTS - TYPE1 - TYPE2 - TOTALTIME
 22 ---- JOHN -     300 ----- 90 ----- 210 --   900
 45 ---- MARK ---   140 ----- 70 ----- 70 ----  480

USERID 22 的点数增加了 3 倍,因为在 USERS TABLE..

中是 3 倍

有什么方法可以更正此问题 - 无需从用户中删除额外的用户 table?

(如果我删除用户,我得到了正确的排名..但我没有纠正问题..因为如果明天有人再次重复,问题将 return)

谢谢!!

您可以尝试加入子查询,如下所示:

SELECT users.userid, 
       users.name, 
       Sum(totalpoints), 
       Sum(type1), 
       Sum(type2), 
       Min(totaltime) 
FROM answers 
       INNER JOIN (SELECT DISTINCT * FROM users) AS users 
       ON users.userid = answers.userid 
WHERE totalpoints > 0 
GROUP BY users.userid 
ORDER BY Sum(totalpoints) DESC, 
      Sum(type1) DESC, 
      Sum(type2) DESC, 
      Min(totaltime) 
LIMIT 50 

...其中子查询仅包含来自用户 table.

的不同行