2016-01-20 178 views
0

我修复了最后一个问题,但现在有其他lil位:我edt我的查询以这种格式。但是,我仍然有一个大问题 - PU_1天& PU_7day计算不正确:在每行中增加“1”(true时为3,当true为1时为1)。我如何解决这个问题? :(Mysql错误的计算

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 
+2

减去一个我的意思.. 。它会计算'0'的值作为一个独特的值,你也可以尝试用'NULL'来切换你的'0',看看是否有帮助,我不记得MySQL是否将NULL计数为一个不同的值。我知道在其他RDBMS中,NULL不被视为“DISTINCT”计数。 – JNevill

+1

根据JNevill ... COUNT()将不包含NULL。你可以COUNT(IF(无论,1,NULL))... – wally

+0

哦,这些家伙,听起来很不错,希望它的作品! –

回答

1

你可以尝试在PU_1day & PU_7day计算表达式从更换的第二个参数象下面这样:从计算

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 
+0

雅,其工作,谢谢! –