我从表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秒。
问题:有没有办法让这个查询执行得更快? (我对加入等所有细微差别都很陌生。)
答案 0 :(得分:0)
只需取出与用户相关的内容:
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秒时你不太可能做出任何大的增加。
干杯 -