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.
的不同行
我的网站上有一个排名 - 有 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.
的不同行