2017-09-06 176 views
-1

有人可以向我解释为什么我的工作不正常吗?SQL where子句子查询

select distinct campaignid 
from(
select 
day, 
campaignid, 
campaignname, 
sum(campaign_impressions) as impressions, 
sum(installs) as installs, 
sum(revenue) as revenue 
from bi.mobile_united_net t 
where (campaignid in (select TOP 14 distinct campaignid 
          from bi.mobile_united_net      
          where campaignid <> '3600961' 
          group by 1 
          order by sum(campaign_impressions) desc 
          ) 
     or campaignid = '1433407') 

group by 1,2,3 
order by 1,2); 

因为我希望只获得15个广告系列,但获得408个广告系列。

enter image description here

感谢, 陈

+0

你能解释更多吗?第一个查询似乎很好 –

+0

它工作不正常吗?你为什么不给我们更多的信息,你是否收到错误信息,这是什么,你期望什么? – HoneyBadger

+0

子查询必须有一个别名 – Khalil

回答

0

这是由1,2,3day,campaignid,campaignname,(即每一天,你的15个活动的一个发生在)分组,以便你会得到一个行白天和运动的每个组合

为了让只有15行,你需要从你的选择,并通过组对组由“活动,清除“天”,campaignname`只有

select distinct campaignid 
from(
select 
campaignid, 
campaignname, 
sum(campaign_impressions) as impressions, 
sum(installs) as installs, 
sum(revenue) as revenue 
from bi.mobile_united_net t 
where (campaignid in (select TOP 14 distinct campaignid 
          from bi.mobile_united_net      
          where campaignid <> '3600961' 
          group by 1 
          order by sum(campaign_impressions) desc 
          ) 
     or campaignid = '1433407') 

group by campaignid,campaignname  
order by 1,2); 

我还建议使用列名称而不是数字进行分组和排序,它使事情更容易阅读和维护。

+0

不幸的是,它仍然没有工作,看看输出(图片附加)。你可以看到有4408行 –

+0

试着把它分解下来,如果你只是运行内部查询(TOP 14),然后下一个出来等等,会发生什么等。 – JeffUK

+0

Oooh,在子查询的末尾尝试限制14而不是顶部14? – JeffUK