SQL - 选择具有最大总和,效率的行

时间:2014-01-07 11:08:41

标签: sql sqlite

我从表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秒。

问题:有没有办法让这个查询执行得更快? (我对加入等所有细微差别都很陌生。)

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秒时你不太可能做出任何大的增加。

干杯 -