开发者社区> 问答> 正文

MYSQL 数据库中多表关联查询的问题

现有两张表
1.player表(playerid,gameid,imei,createtime)(玩家注册表)(playerid唯一,每个playerid对应一个IMEI,但是一个IMEI可能对应多个playerid)
2.playerbehavior表(playerid,gameid,acttime)(玩家登陆行为表)(acttime就是年月日,当天可能多次登陆)
现在我想查询的思路就是:player表中当天(1月29日)注册的玩家中IMEI独立的玩家,在登陆行为表中第二天(1月30日),有登陆行为的用户总共有多少人
PS:有可能多个playerid用户的IMEI是一样的,独立IMEI玩家就是IMEI一样的算作是同一个玩家:playerid=23,IMEI=123456,但是此玩家还有个playerid=24,IMEI=123456的账号,这两个账号都在第二天登陆了,但是只计算一个次日登陆数统计
如何写sql语句,求帮助。

展开
收起
落地花开啦 2016-02-13 11:15:01 3118 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    假设统计日期为stat_dt(date类型),playerids代表imei下登陆的所有的id
    方案一
    `select imei,group_concat(playerid) from playerids as p
    inner join playerbehavior as pb on pb.playerid=p.playerid and pb.acttime=date_add(stat_dt,interval 1 day)
    where p.createtime>=stat_dt and p.createtimegroup by imei order by null;`
    方案二
    `select imei,group_concat(p.playerid) from playerids as p
    inner join (select playerid from playerbehavior where acttime=date_add(stat_dt,interval 1 day)) as tb

      on tb.playerid=p.playerid 

    where p.createtime>=stat_dtm and p.createtimegroup by imei order by null;`
    两种方案的区别在于playerbehavior此表每天的数据量,由于方案二使用了临时表,虽然join的数量小了,但无法使用索引,不一定比方案一效率高,同时还要考虑playerbehavior索引
    根据实际情况综合考虑

    2019-07-17 18:41:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像