请问这样的SQl语句还有优化的地方吗?

天南海北 发布于 2012/06/28 14:30
阅读 174
收藏 0

基础表结构是这样:

游戏ID(game_id),平台ID(agent_id),账号名(player_id),登录时间(login_time),登出时间(logout_time)

现在要得出
1,玩家在各个游戏的不同平台下每天登录过一次以上的人数(玩家要去重)
2,玩家在各个游戏的不同平台下每天登录过两次以上的人数(玩家要去重)

SELECT
  SUM(tt.login1count),
  SUM(tt.login2count)
FROM (SELECT
        COUNT(DISTINCT(CASE WHEN logincount>=1 THEN t.player_id END)) AS login1count,
        COUNT(DISTINCT(CASE WHEN logincount>=2 THEN t.player_id END)) AS login2count
      FROM (SELECT
              player_id,
              COUNT(1)  AS logincount
            FROM loginlog
            WHERE  FROM_UNIXTIME(`login_time`,'yyyy-MM-dd') = '2012-06-01'
            GROUP BY game_id,agent_id,player_id) t) tt;

这样下来,要计算三次吧,太折腾了,所以问问大家,还有进一步优化的办法吗?

加载中
0
红薯
红薯
三层嵌套啊。。。
天南海北
天南海北
是啊,可有办法?
0
RickyFeng
RickyFeng
FROM_UNIXTIME(`login_time`,'yyyy-MM-dd') = '2012-06-01'  这个就可以优化
RickyFeng
RickyFeng
回复 @haikuotiankong : 改成 `login_time` = UNIX_TIMESTAMP('2012-06-01 00:00:00')
天南海北
天南海北
还可以怎么优化?
0
Inside
Inside
用中间表,记录登录id和次数,用到的时候加上条件sum一次就行。
天南海北
天南海北
是hive呢,怎么用中间表?
返回顶部
顶部