计算特定级别的次数,然后将其聚合为新变量的次数

时间:2018-03-23 15:39:50

标签: sql

计算特定级别(在交易数据中)的次数,然后将其聚合为新变量的次数(每个客户一行下)

enter image description here

我有两个级别的招揽方法,电话和电子邮件。我创建了2个新列,用于计算每个ID发送电话或电子邮件的次数。现在我有交易数据,无法弄清楚如何去做。数据在左边,我想要的是在右边。我可以在右侧使用两种输出。 到目前为止我试过这个。返回错误

create table d.email as
select ID, email_count  
from d.emai
where email_count = (select count (*) 
                     from d.email
                     group by ID
                     having SolicitMethod = 'Email' );
quit;

2 个答案:

答案 0 :(得分:0)

我不确定你真正想做什么,但你可以通过使子查询成为相关的子查询来修复语法错误:

create table d.email as
    select ID, email_count  
    from d.emai e
    where email_count = (select count(*) 
                         from d.email e2
                         where  e2.SolicitMethod = 'Email' and e2.id = e.id
                        );

我认为第一个from中的引用应为d.emai

答案 1 :(得分:0)

可以使用此查询获取第一个输出:

按ID对行进行分组,然后计算每个SolicitMethod上的行数

SELECT id
     , SUM(CASE
               WHEN SolicitMethod = 'Email' THEN 1
               ELSE 0
             END) count_email
     , SUM(CASE
               WHEN SolicitMethod = 'phone' THEN 1
               ELSE 0
             END) count_phone
FROM   d.email
GROUP  BY id

此第二个输出查询取决于您的dbms和分析功能的可用性:

它依靠每一行id 的sollicitMethod计数每行

 SELECT id
         , SUM(CASE
                   WHEN SolicitMethod = 'Email' THEN 1
                   ELSE 0
                 END)
               OVER (partition BY id) count_email
         , SUM(CASE
                   WHEN SolicitMethod = 'phone' THEN 1
                   ELSE 0
                 END)
               OVER (partition BY id) count_phone
    FROM   d.email