[英]SQL - Selecting rows with max sums, efficiency
我从表player_info和表player_map_info的time_played列具有max(sum())的行中进行选择。 player_map_info的主键是(player_id,color,map),我想在所有地图上获得播放时间最多的颜色。
我正在使用以下查询:
SELECT A.*,
B.color AS main_color,
B.maxtp
FROM player_info A
LEFT OUTER JOIN (SELECT E.player_id,
E.color,
Max(sumtp) AS maxtp
FROM player_map_info C
LEFT OUTER JOIN (SELECT player_id,
color,
Sum(time_played) AS sumtp
FROM player_map_info
GROUP BY player_id,
color) E
ON C.player_id = E.player_id
AND C.color = E.color
GROUP BY E.player_id) B
ON A.player_id = B.player_id
WHERE A.user_id = :user_id
我正在使用SQLite。 在我的数据库上执行此操作仅需不到0.1秒的时间。
问题:有什么方法可以使此查询的执行速度更快? (对于加入等所有细微差别,我还是一个新手。)
只需取出与用户相关的内容即可:
SELECT C.color, maxtp
FROM player_map_info C
inner join (SELECT max(time_played) AS maxtp
FROM player_map_info
) mx
) B ON c.time_played = mx.maxtp
内部查询mx获得最大的time_played,外部查询重新连接至它以获取颜色。 那将获得最多的颜色。
为了更快。 好吧,在0.1秒时,您不太可能大幅增加。
干杯-
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.