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

时间:2016-04-05 04:08:49

标签: mysql duplicates ranking

我的网站上有一个排名 - 有2个表:用户和答案。

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”) - 如果我们有一个DRAW,TYPE1 WIN中的大多数点... TYPE2中的大多数点(全表有11种类型) )..

这里:用户22有100分 - 用户45有140分。

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

我的问题:

USER TABLE是:

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

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

我正在使用此SELECT创建排名(TOP 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倍。

有没有办法纠正这个问题 - 没有从用户表中删除额外的用户?

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

TKS !!

  • 我需要消除重复的行。不是总和。

1 个答案:

答案 0 :(得分:1)

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

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 

...子查询只包含users表中的不同行。