我正在尝试为游戏创建排行榜。游戏包含用自己的ID标记的不同游戏。 MySQL数据库中的“参与”表如下所示:
| participation_id | user_id | score1 | score2 | score3 | total |
| 1 | 23 | 78 | 12 | 98 | |
| 2 | 31 | 68 | 45 | 95 | |
| 3 | 23 | 98 | 23 | 100 | |
所有分数从0到100仅供参考。
我想为每个参与填充score1+score2+score3
的总列,如果同一个用户运行的其他参与总得分更高,则会NULL
或0
。
当我遇到MySQL脚本时,我是一个初学者,所以我问你,尤其是脚本的第二部分:/
关于总分的注意事项:我不会计算插入行时的总分,因为分数值需要归一化为从0到100。
编辑:由于写入数据库会产生冗余而且在我的情况下不需要,我更新了我的问题:如何过滤这些结果以保持每个用户的最佳分数?< / p>
| user_id | total |
| 1 | 98 |
| 2 | 45 |
| 1 | 12 |
| 2 | 69 |
| 1 | 54 |
EDIT2 :最简单的解决方案是使用GROUP BY
,如下所示:
SELECT user_id, MAX(total) AS score
FROM table_name
GROUP BY score
感谢您的推荐!
答案 0 :(得分:3)
当你可以做这样的事情时,为什么要费心去做?
SELECT
user_id,
MAX(score_1 + score_2 + score_3)
FROM
scores
GROUP BY
user_id
这将为每位用户提供最佳总分。如果您想要做一些更复杂的事情,那么只需询问,但添加总列会违反正常形式(因此得分为score_1,得分_2,得分_3 btw)。
更好的设计可能是:
participation_id user_id score_id score
1 23 1 78
1 23 2 12
1 23 3 98
2 31 1 68
...