【问题标题】:SQL Server - monthly avg of countSQL Server - 每月平均计数
【发布时间】:2016-10-02 08:40:12
【问题描述】:

我希望能够找出计数的每月平均值

我现在的代码是

SELECT 
    company, 
    COUNT(company) AS 'count'
FROM Information
GROUP BY company

我基本上需要它是

SELECT company, 
       count(company) as 'count'
       avg(count(company)) per month as 'average'
FROM Information
group by company

我希望结果看起来像这样

company count   monthly average
a       5       6
b       13      14
c       2       2
d       45      45
e       23      21
f       6       5

【问题讨论】:

  • 你有哪些字段的日期/月份信息?
  • 向我们展示数据库架构、示例数据和预期结果。你向我们展示了一些预期的结果,但不要说你从哪里得到的。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。
  • @JuanCarlosOropeza start_date
  • 你没有看我的评论,我们需要样本数据和数据库架构
  • 您是否只想查看信息记录的月份并统计每个月的记录?通常人们会将第一个月和最后一个月与其他月份不同。例如。数据从 4 月 1 日开始,4 月有 21 条记录,然后是 5 月和 21 条记录,到今天为止,6 月的记录为零。平均值是 42/3 还是 42/2,因为我们还不能考虑 6 月? 42/2 似乎更现实,但更难计算。但是,您的抽样数据似乎暗示了这一点(某些公司的月平均值高于总数)。

标签: sql-server date count average


【解决方案1】:

一个非常简单的方法是先计算每个公司和每个月,然后汇总这些数据以获得每个公司的总数和平均值。

select
  company,
  sum(cnt) as records,
  avg(cnt) as records_per_month
from
(
  select company, year(start_date), month(start_date), count(*) as cnt
  from information
  group by company, year(start_date), month(start_date)
) agg
group by company;

但请阅读我对您问题的评论。

【讨论】:

    【解决方案2】:
    SELECT YEAR(yourDate) * 100 + MONTH(yourDate) YYMM,
            company, 
            count(company) as 'count'
            avg(count(company)) per month as 'average'
    FROM Information
    group by company
    ,YEAR(yourDate) * 100 + MONTH(yourDate)
    

    【讨论】:

    • 你当然可以对 YEAR & MONTH 应用更复杂的格式,我只是为了加快插图速度而制作了 201606 风格的记录
    猜你喜欢
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多