同一查询中的计数和平均值

时间:2016-02-13 15:54:52

标签: sql sql-server-2008

SQL Server 2008

我有以下查询,我希望在查询中添加平均值。

SELECT 
    CNTS.ID, CNTS.LOCATION, CNTS.CLASS, CNTS.DATE_YYYYMM, 
    CNTS.PHONE_Contacts, CNTS.VISITS, CNTS.Total_Contacts 
FROM
    (SELECT 
         A.ID, A.LOCATION, A.CLASS, A.DATE_YYYYMM,
         SUM(CASE WHEN a.IST =1 AND a.RCH = 'Contact' THEN 1 ELSE NULL END) AS VISITS,
         SUM(CASE WHEN a.IST = 0 AND a.RCH = 'Contact' THEN 1 ELSE NULL END) AS Phone_Contacts,
         SUM(CASE WHEN a.RCH = 'Contact' THEN 1 ELSE NULL END) AS Total_Contacts
     FROM 
         (SELECT DISTINCT 
              *,
              CONVERT(NVARCHAR(6), [DATE], 112) AS DATE_YYYYMM,
          FROM z) A
     GROUP BY 
         A.ID, A.LOCATION, A.CLASS, A.DATE_YYYYMM) CNTS

期望输出

id      class    date_yyyy    phone_contacts    vist_contacts    total_contacts    avg_phone_contacts_perid    avg_visit_contacts_perid    avg_total_contacts per id

1        start    201501           2             1                 3

2 个答案:

答案 0 :(得分:0)

如果要获取单行总计 - 请让外部查询也聚合数据。使用适当的GROUP BY子句。

您已经按照更高的粒度级别对每个ID,位置,类和日期 - 现在组进行了分组。当您为每个ID请求单独的行时,无法获取avg_phone_contacts_perid。除非您希望在每一行中看到相同的avg_phone_contacts_perid值(例如进行比较),否则可以通过windows函数AVG(...) OVER (...)

来实现

答案 1 :(得分:0)

如果你使用avg()和sum()函数似乎很简单,或者你应该将它嵌套到另一个子查询中,如下所示。

Average on a count() in same query

但是你也可以尝试sql变量或人工连接列。