【问题标题】:Calculating Average based on Month and ID in SQLSQL中根据月份和ID计算平均值
【发布时间】:2018-04-30 17:13:31
【问题描述】:

我有一个如下所示的示例表,并希望根据DATEIDMONTH 进行平均。有什么办法可以在 SQL 中做到这一点。

Table:Input

DATE ID VOLUME 20080630 A 45 20080628 A 23 20080629 A 34 20080627 A 33 20080730 A 45 20080728 A 12 20080730 A 34 20080724 A 56 20080430 A 34 20080428 A 23 20080630 B 12 20080628 B 45 20080629 B 67 20080627 B 78 20080730 B 45 20080728 B 12 20080730 B 34 20080724 B 56 20080430 B 2 20080428 B 34

Table:Output

DATE ID VOLUME AVERAGE 20080630 A 45 33.75 20080628 A 23 33.75 20080629 A 34 33.75 20080627 A 33 33.75 20080730 A 45 36.75 20080728 A 12 36.75 20080730 A 34 36.75 20080724 A 56 36.75 20080430 A 34 28.5 20080428 A 23 28.5 20080630 B 12 50.5 20080628 B 45 50.5 20080629 B 67 50.5 20080627 B 78 50.5 20080730 B 45 36.75 20080728 B 12 36.75 20080730 B 34 36.75 20080724 B 56 36.75 20080430 B 2 18 20080428 B 34 18

【问题讨论】:

  • DATE 列的类型是什么?它是 VARCHAR 或 DATE 还是其他?
  • @gil.fernandes 现在是日期
  • 你的 DBMS 是什么?

标签: sql count distinct average


【解决方案1】:

你可以试试这个查询:

select DATE_FORMAT(date,'%Y%m'), id, avg(volume) from xxx1 
    group by DATE_FORMAT(date,'%Y%m'), ID;

select DATE_FORMAT(date,'%m'), id, avg(volume) from xxx1 
    group by DATE_FORMAT(date,'%m'), ID

解释:

DATE_FORMAT(date,'%Y%m') 从日期中提取月份和年份。而DATE_FORMAT(date,'%m') 仅提取月份。 (我不太确定,如果你想要没有年份的月份)。

基本上,您提取月份,然后将其与 id 一起分组,然后计算这些组的平均成交量。

【讨论】:

  • @dnoeth 我已经用 MySQL 测试过了。
【解决方案2】:

这是标准 SQL 答案,因为您没有标记 DBMS:

AVG(VOLUME)
OVER (PARTITION BY EXTRACT(YEAR FROM datecolumn)
                  ,EXTRACT(MONTH FROM datecolumn)) 

【讨论】:

    【解决方案3】:

    如果你使用的是mssql服务器then so

    select t1.*, t2.AVG
    from TABLE1 t1
    join
    (
        SELECT avg(volume) as AVG, MONTH(date) as DATE
        FROM TABLE1
        GROUP BY MONTH(date), ID
    ) t2 on MONTH(t1.DATE) = t2.DATE
    

    输出将符合要求。该查询将从源表中选择所有列,并将添加 GROUP BY 一列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2023-03-06
      • 1970-01-01
      • 2019-01-31
      相关资源
      最近更新 更多