我的网站上有一个排名 - 有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 !!
答案 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表中的不同行。