我修复了最后一个问题,但现在还有一些其他问题:我以这种格式编辑了我的查询。但是,我仍然有 1 个大问题 - PU_1day 和 PU_7day 计算不正确:每行中附加“1”(当 true 为 2 时为 3,当 true 为 0 时为 1)。我该如何解决这个问题? :(
SELECT u.date,
u.des_channel,
u.des_type,
u.country,
count(distinct(u.id)) as Reg_n,
sum(if((u.date=bp.date)*(u.id=bp.user_id),bp.o_outcome,0)) as P_$,
sum(if((u.date=bp.date)*(u.id=bp.user_id),1,0)) as P_n,
count(distinct(if((u.date=bp.date)*(u.id=bp.user_id),bp.user_id,0))) as PU_1day,
count(distinct(if(truncate(timestampdiff(hour,u.datetime,bp.datetime)/24,0)<7,bp.user_id,0))) as PU_7day
FROM mayadata.users u
left join mayadata.billing_pays bp
on u.id=bp.user_id
WHERE u.country in ('TH','ZA','ID','IN','NG','MY') and
truncate(timestampdiff(hour,u.datetime,bp.datetime)/24,0)<7 and
u.date>='2011-01-01'
GROUP BY u.date, u.des_channel, u.des_type
最佳答案
您能否尝试将 PU_1day 和 PU_7day 计算表达式中的第二个参数从 0 替换为 null,如下所示:
SELECT u.date,
u.des_channel,
u.des_type,
u.country,
count(distinct(u.id)) as Reg_n,
sum(if((u.date=bp.date)*(u.id=bp.user_id),bp.o_outcome,0)) as P_$,
sum(if((u.date=bp.date)*(u.id=bp.user_id),1,0)) as P_n,
count(distinct(if((u.date=bp.date)*(u.id=bp.user_id),bp.user_id,null))) as PU_1day,
count(distinct(if(truncate(timestampdiff(hour,u.datetime,bp.datetime)/24,0)<7,bp.user_id,null))) as PU_7day
FROM mayadata.users u
left join mayadata.billing_pays bp
on u.id=bp.user_id
WHERE u.country in ('TH','ZA','ID','IN','NG','MY') and
truncate(timestampdiff(hour,u.datetime,bp.datetime)/24,0)<7 and
u.date>='2011-01-01'
GROUP BY u.date, u.des_channel, u.des_type
关于Mysql计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34901494/