【问题标题】:Trying to get the average of a count resultset using sql server 2016尝试使用 sql server 2016 获取计数结果集的平均值
【发布时间】:2021-06-14 13:25:26
【问题描述】:

我有以下使用 SQL Server 2016 (RTM-GDR) (KB4058560) - 13.0.1745.2 (X64) 版本的 SQL:

SELECT 
    COUNT(*) AS tot,
    PageView 
FROM
    [dbo].[LOG] 
GROUP BY
    PageView 
ORDER BY
    COUNT(*) DESC;

现在我得到了这个结果集

tot     PageView    
7893    APP 1
1476    APP 2
478     APP 3

我想获取此列表的平均每日访问量

我没有让它工作

SELECT AVG(COUNT) AS avg,
       t 
FROM
    (
    SELECT 
        COUNT(*) AS COUNT,
        T.PageView t 
    FROM
        [dbo].[LOG] T 
    WHERE
        T.DateHour = (SELECT MAX (B.DateHour) FROM [dbo].[LOG] B WHERE (B.Id = T.Id)) 
    GROUP BY
        T.PageView 
    ) AS counts 
GROUP BY
    t;

avg     PageView
7893    APP 1
1476    APP 2
478     APP 3

下面是我的表结构

-- ----------------------------
-- Table structure for LOG
-- ----------------------------   
CREATE TABLE [dbo].[LOG] (
  [id] bigint  IDENTITY(1,1) NOT NULL,
  [user] nvarchar(10) COLLATE Latin1_General_CI_AS  NULL,
  [PageView] nvarchar(100) COLLATE Latin1_General_CI_AS  NULL,
  [DateHour] smalldatetime DEFAULT getdate() NULL
)
GO

更新样本数据

我想获取此列表的平均每日访问量

id;user;PageView;DateHour
10;97697;APP 1;18/12/2017 18:12:00
11;97697;APP 1;18/12/2017 18:15:00
12;97697;APP 2;18/12/2017 18:15:00
13;97697;APP 2;18/12/2017 18:18:00
14;97697;APP 2;18/12/2017 18:25:00
15;15841;APP 1;18/12/2017 18:31:00
16;15841;APP 1;18/12/2017 18:53:00
17;15841;APP 1;18/12/2017 19:04:00
18;15841;APP 1;18/12/2017 19:09:00
19;15841;APP 2;18/12/2017 19:10:00
20;09623;APP 1;18/12/2017 20:15:00
21;23265;APP 1;18/12/2017 21:05:00
22;09623;APP 1;18/12/2017 21:29:00
23;25506;APP 1;18/12/2017 21:49:00
24;20986;APP 1;18/12/2017 22:33:00
25;25623;APP 1;18/12/2017 23:46:00
26;95932;APP 1;19/12/2017 00:02:00
27;29067;APP 1;19/12/2017 00:03:00
28;32337;APP 1;19/12/2017 00:09:00
29;23265;APP 1;19/12/2017 00:16:00
30;09343;APP 1;19/12/2017 00:20:00
31;20901;APP 1;19/12/2017 00:35:00
32;26786;APP 1;19/12/2017 00:47:00
33;24980;APP 1;19/12/2017 00:49:00
34;25996;APP 1;19/12/2017 00:52:00
35;14949;APP 1;19/12/2017 01:03:00
36;54987;APP 1;19/12/2017 01:47:00
37;23265;APP 1;19/12/2017 04:53:00
38;20635;APP 3;19/12/2017 06:14:00
39;25081;APP 3;19/12/2017 06:38:00
40;61660;APP 3;19/12/2017 06:42:00

【问题讨论】:

  • 样本数据和预期结果将帮助我们帮助您。对于您给出的示例,每个页面只有 1 行,因此该值的平均值将是该值。平均值是通过值的总和除以聚合值的数量来计算的。例如,在上面,那将是7893 / 1,即(不出所料)7893
  • @Larnu 感谢您的回复,请参阅第一个问题的更新示例数据
  • 预期结果如何?
  • @Larnu for PageView 等于 App 1 我存储了 24 行,分为两天(18-19/2017)。平均值为 24/2 = 12 ...

标签: sql-server average


【解决方案1】:

如果我理解正确,您需要计数结果集的平均值。如果是这样,您不需要第二组。查询将是:

SELECT AVG(COUNT) AS avg
FROM
(
SELECT 
    COUNT(*) AS COUNT,
    T.PageView t 
FROM
    [dbo].[LOG] T 
WHERE
    T.DateHour = (SELECT MAX (B.DateHour) FROM [dbo].[LOG] B WHERE (B.Id = T.Id)) 
GROUP BY
    T.PageView 
) AS counts 

【讨论】:

  • 感谢回复,请查看第一个问题的更新示例数据
猜你喜欢
  • 2011-12-05
  • 1970-01-01
  • 2016-09-08
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多