首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个不同计数的联合的SQL计数

两个不同计数的联合的SQL计数
EN

Stack Overflow用户
提问于 2014-07-14 21:39:29
回答 2查看 234关注 0票数 0

我有两个不同的查询,第一个会给我每天有呼出的用户数,第二个会给我每天有呼入的用户数。我想要这两个查询的统一。我的意思是,我想每天有呼入或呼出的用户数量。对于这样的结果,正确的查询是什么?

代码语言:javascript
运行
复制
1) select call_date, count(*) 
from 
(select distinct anum,call_date 
from  CDR 
where anum in (select msisdn from degree_cmp_week1)
)
group by call_date 
order by call_date;

2) select call_date, count(*) 
from 
(select distinct bnum,call_date 
from  CDR 
where bnum in (select msisdn from degree_cmp_week1)
)
group by call_date 
order by call_date;

FYI CDR是呼叫详细信息记录表。它包括anum (呼叫源)、bnum (呼叫目的地)和呼叫日期。我正在寻找计算的人数,有任何类型的活动(打电话给某人或某人打电话给他/她)每天。第一个查询将为我提供作为呼叫源的人数,第二个查询将为我提供作为呼叫目的地的人数。假设第一个查询给我n(A),第二个查询给我n(B)。我正在寻找n(A和B)。如你所知,n(A,U,B)= n(A )+n( B) - n(A交集B)。所以找到n(A交叉点B)也会对我有帮助。

附言:我使用oracle 11,所以请考虑一下。

EN

回答 2

Stack Overflow用户

发布于 2014-07-14 21:43:21

只需在查询中询问入站和出站呼叫:

代码语言:javascript
运行
复制
select call_date, count(num) 
from 
 (select distinct anum as num, call_date 
  from  CDR 
  where anum in (select msisdn from degree_cmp_week1)
  )
  union 
  (select distinct bnum as num ,call_date 
  from CDR
  where bnum in (select msisdn from degree_cmp_week1)
  )
group by call_date 
order by call_date;
票数 0
EN

Stack Overflow用户

发布于 2014-07-14 21:55:08

下面这样的代码可以在一个查询中同时提供这两个结果:

代码语言:javascript
运行
复制
with ids as (
  select distinct msisdn
  from degree_cmp_week1
), calls as (
  select
    call_date,
    nvl2 (i1.msisdn, 1, 0) as a_count,
    nvl2 (i2.msisdn, 1, 0) as b_count
  from
    CDR,
    ids i1,
    ids i2
  where
    CDR.anum = i1.msisdn (+) and
    CDR.bnum = i2.msisdn (+)
)
select
  call_date, sum (a_count) as a_count,
  sum (b_count) as b_count
from calls
group by call_date
order by call_date
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24737848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档