以下是多玩家游戏的简单示例,其中许多游戏在几个赛季中进行。每个玩家的游戏 ID,玩家名称,得分以及正在播放的赛季都会记录在一张桌子。下面的查询显示了如何从特定赛季的所有比赛中获得球员排名的摘要。
SELECT game, score FROM Table WHERE name='name' AND season='season'
ORDER BY game;
while(Fetching Result)
{
SELECT COUNT(*) AS 'total',
SUM(CASE WHEN score>='score' THEN 1 ELSE 0 END) AS 'rank'
FROM Table WHERE game='game' AND season='season';
}
输出包含玩家在所有游戏中的游戏,得分,等级和总数特定季节,ORDER BY game
。我想知道是否有更有效的方法来执行此操作而不是使用while
循环。
答案 0 :(得分:0)
抱歉,我第一次发帖时对列名感到困惑。您无法在查询本身中进行大量优化,因为您第二次想要获取有关游戏的数据,而不是您想要排名的玩家。您可以将它们作为子查询/连接添加到第一个,但第二个查询可以使用多个行,因此可以完成此操作,但会导致返回其他行。
在检索此数据时使事情更快速运行的一种方法是在数据库中添加新信息 - 每个玩家的游戏和游戏中的总参与者的等级。您可以在游戏结束后立即计算,就像现在使用第二个查询一样,并将结果保存在您可以更快地访问它们的地方,而无需在每次需要时计算信息。