如何根据不同的分组加入内部查询和计算列?

时间:2016-06-24 11:07:29

标签: sql join

我有一张表格,其中包含有关商店一系列访问的数据。 可以找到这些访问的原始数据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列,这意味着值不正确。

1 个答案:

答案 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投射中使用精确度以避免舍入最终结果。