从其他人计算列并在表中写入结果

时间:2012-03-29 21:00:59

标签: mysql

我正在尝试为游戏创建排行榜。游戏包含用自己的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的总列,如果同一个用户运行的其他参与总得分更高,则会NULL0。 当我遇到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

感谢您的推荐!

1 个答案:

答案 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
...