我有一张表格,其中包含有关商店一系列访问的数据。 可以找到这些访问的原始数据here。
我的主表每个国家/地区将有1行,并将使用以下内容:
Select Distinct o.Country from OtherTable as o
我需要在主表中添加一个新列,使用以下计算:
" Avg用户访问" =(总和(编号呼叫ID /编号唯一用户ID) 对于每天)/唯一的天数(基于实际开始) 行。
我已经形成了这个额外的select语句来获取白天的呼叫和用户数量 - 但我很难将其加入到我的主表中:
Select DATEPART(DAY, c.ActualStart) As 'Day',
CAST(CAST(COUNT(c.CallID) AS DECIMAL (5,1))/CAST(COUNT(Distinct c.UserID) AS DECIMAL (5,1)) AS DECIMAL (5,1)) as 'Value' from CallInfo as c
where (c.Status = 3))
Group by DATEPART(DAY, c.ActualStart)
对于国家GB,我希望看到以下输出:
Day Calls Users Calls / Users
13-Jun 29 8 3.625
14-Jun 31 7 4.428571429
因此,在我的主表中,我的新列的计算将是:
8.053571/2
因此,如果我以某种方式将此添加到我的表中,我希望得到以下输出:
Country Unique Days Sum of Calls/Users for each day) Final Calc
GB 2 8.053571429 4.026785714
我尝试将其添加为联接,但我不知道如何将其添加到我的主表中。我可以加入Call Id - 但这需要在我的内部查询中添加一个callID列,这意味着值不正确。
答案 0 :(得分:0)
您可以使用子查询按天计算,然后按国家/地区进行计算。结果SQL查询可以是这样的:
-- Make calculation by country, from the subquery
SELECT Country, UniqueDays = count(TheDay), CallsUserPerDay = sum(CallsPerUser),
FinalCalc = sum(CallsPerUser) / cast(count(TheDay) as DECIMAL)
FROM (
-- SUBQUERY: Make calculations by day
SELECT c.Country, c.ActualStart as TheDay,
Calls = COUNT(c.CallID),
Users = COUNT(Distinct c.UserID),
COUNT(c.CallID)
/CAST(COUNT(Distinct c.UserID) AS DECIMAL) as CallsPerUser
FROM CallInfo as c
WHERE (c.Status = 3)
GROUP BY c.Country, c.ActualStart
) data
GROUP BY Country
注意:我避免在DECIMAL投射中使用精确度以避免舍入最终结果。