我有一个users
表和一个scores
表:
-------- users Name | Type ------------------------|---------------- uuid | VARCHAR(36) name | VARCHAR(255) ... | ...
-------- scores Name | Type ------------------------|---------------- uuid | VARCHAR(36) user_uuid | VARCHAR(36) score | INT(11)
我可以使用这样的子查询来获取user
,包括他们的总score
:
SELECT user.uuid, user.name,
(SELECT SUM(score) FROM scores WHERE user_uuid = user.uuid) AS score
FROM user WHERE user.uuid = [USER_UUID];
但是现在,我该如何获取用户的排名?也就是说,排名由他们的分数与每个其他用户的分数决定。
是否真的有必要遍历每一个user
,计算他们的所有分数,然后命令他们的分数来确定一个用户的等级?即时执行此查询似乎很费劲,特别是如果我有大量用户。我是否应该构建一个单独的rankings
表,并在每次INSERT后将表重新排序到scores
表中?这看起来并不理想。
我还有另一个需要动态排名的应用程序,但计算要严格得多:用户score
由至少5个不同表格的复杂算法决定。所以我真的需要对数据库排名有一些了解 - 虽然上述问题是一种简单的方法来表示它。有哪些好的做法需要考虑?
答案 0 :(得分:2)
我认为将每个用户的等级保持在不同的表中(使用将数据插入分数表时的过程)会更好。这样您就可以在需要时立即获得排名。
在此链接中将标记视为正确答案。它可能对你有帮助。 rank function in sql