mysql查询周流失

前边提问说查周流失率,就是上周登录的人在本周没登录这样的一个人数。
select count(1) from (select distinct playerId from log_login l1 where week(now())-1=week(loginTime) and not exists(select distinct playerId from log_login l2 where l1.playerId = l2.playerId and week(NOW()) =week(loginTime)))t;

现在又让我查各级别的周流失用户数
比如说等级为2-10级这样一个等级段的人上周登录了在本周没登陆的人数。
有好几个阶段 1,2-10,11-20,21-40,41-60,61-80,81-100.
我加上leve>=x and level<=x。这几个查出来的数量比上周登录的总用户还要多!!
不知道是我的sql语句错了,还是数据库的数据有问题。
下面是我的sql语句:
select count(distinct playerId) from log_login l1 where week(now())-1=week(loginTime) and level=1 and not exists(select distinct playerId from log_login l2 where l1.playerId = l2.playerId and week(NOW()) =week(loginTime) and level=1);

2个回答

select count(distinct playerId) from log_login l1 where week(now())=week(loginTime) and level=1 and not exists(select distinct playerId from log_login l2 where l1.playerId = l2.playerId and week(NOW()) -1=week(loginTime));

去掉 and level=1 否则查询时会造成 很多not exists

bqmcjl
无敌小贱 奥奥~~~学到老活到老!!
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian 只查自己的 你那样写 是查全表最高的
7 年多之前 回复
bqmcjl
无敌小贱 我了个擦!!!大哥你太牛逼了!!!我能拜你为师么!?为什么这样就对了?
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian (select max(level) from log_login l3 where l1.playerId = l3.playerId )
7 年多之前 回复
bqmcjl
无敌小贱 select count(distinct playerId) from log_login l1 where week(now())-1=week(loginTime) and (select max(level) from log_login)>=11 and (select max(level) from log_login)<=20 and not exists(select distinct playerId from log_login l2 where l1.playerId = l2.playerId and week(NOW()) =week(loginTime)); 这是写全的。包括判断是否上周登录了。
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian l1.playerId = l2.playerId 这么连表 你写出来试下 然后我帮你分析下
7 年多之前 回复
bqmcjl
无敌小贱 select count(distinct playerId) from log_login l1 where week(now())=week(loginTime) and (select max(level) from log_login where week(NOW())=week(loginTime))>=21 and (select max(level) from log_login where week(NOW())=week(loginTime))<=40; 我感觉这个条件加不加都行啊。这样查出来还是0
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian select max(level) from log_login 这里边要加和l1 相等的条件
7 年多之前 回复
bqmcjl
无敌小贱 select count(distinct playerId) from log_login l1 where week(now())=week(loginTime) and (select max(level) from log_login)>=2 and (select max(level) from log_login)<=10; 我没加上周是否登录的判断,查出来的都是0。好头疼啊
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian (select max(level) from ) = 1 那再写个子查询 判断 试试
7 年多之前 回复
bqmcjl
无敌小贱 这样还是那个问题。我刚才问了一下,一个人可能有多个等级。今天他升了好几级,登录了好几次,而且也跨过了我统计的这个范围,这样就会有一个用户统计出来好几个的情况,我排重了它还是这样,可能要取它的最高级来查。这个怎么写啊。我加上max(level)就查出来都是0了。
7 年多之前 回复

写得差不多了啊

bqmcjl
无敌小贱 但是查出来不对啊。一个人可能有多个等级,登录了好几次,还跨过了我统计范围。所以就会出现一个人统计出来好几次。如果加上条件取今天的最高等级怎么写啊?
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐