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
答案 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变量或人工连接列。