【问题标题】:Calculating Average by Month / Year按月/年计算平均值
【发布时间】:2018-12-31 07:59:48
【问题描述】:

我正在尝试计算每月的平均记录数,但下面的示例代码无法正常工作。

谁能看到我做错了什么?我检查了其他一些问题,例如SQL Server - monthly avg of count,但它对我不起作用。

Create Table #TestData
(
    DateCreated datetime,
    Number int 
)

Insert into #TestData
(
    DateCreated,
    Number
)
SELECT
    '26 Nov 2018',
    '10'
UNION
SELECT
    '26 Nov 2018',
    '11'
UNION
SELECT
    '27 Nov 2018',
    '10'
UNION
SELECT
    '28 Nov 2018',
    '11'
UNION
SELECT
    '29 Nov 2018',
    '20'
UNION
SELECT
    '30 Nov 2018',
    '35'
UNION
SELECT
    '01 Dec 2018',
    '35'
UNION
SELECT
    '02 Dec 2018',
    '40'
UNION
SELECT
    '02 Dec 2018',
    '75'

select 
    month,
    year,
    cnt,
    avg(cnt) as avg
from
(
select 
    MONTH(DateCreated) AS [month],
    YEAR(DateCreated) AS [year],
    count(*) as cnt
from 
    #TestData
group by
    MONTH(DateCreated),
    YEAR(DateCreated)
) agg
group by
    cnt,
    month,
    year

drop table #TestData

【问题讨论】:

  • .... GROUP BY cnt, month year,但是你之前的级别有GROUP BY month, year,也就是说你只能有一个(month, year),元组。您是否添加了额外的级别或其他内容?
  • 感谢您的回复,如果我没有那两组group bys,我不能使用count(*) 或avg(cnt)
  • 外部group by(和select)中的cnt 是您做错了。从外部查询中删除它,你会得到你想要的结果。
  • @ZoharPeled ,您介意将其发布为答案吗?我已经从外部查询中删除了 cnt 并且没有区别,仍然没有得到正确的平均值。
  • 所以你想要每个月每天的平均记录数?

标签: sql-server tsql


【解决方案1】:

根据我们在 cmets 中的对话,您似乎想要每个月的平均每日记录计数 - 以下是对问题代码的小修改以获得该:

select 
     MONTH(DateCreated) As month,
     YEAR(DateCreated) As year,
     avg(cast(cnt as float)) as avg -- cast as float otherwise you'll get an integer result
from
(
    select 
        CAST(DateCreated As Date) AS DateCreated,
        count(*) as cnt
    from 
        #TestData
    group by
        CAST(DateCreated As Date) -- group by days
) agg
group by
     MONTH(DateCreated),
     YEAR(DateCreated)

【讨论】:

  • 很高兴为您提供帮助 :-)
【解决方案2】:

如果你可以使用窗口函数,这应该可以工作

select #TestData.*
    ,average = avg(number) over (partition by convert(varchar(7), DateCreated, 120)) 
from #TestData

select #TestData.*
,average = avg(number) over (partition by year(DateCreated), month(DateCreated))
from #TestData

db小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2019-12-05
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多