SQL:按月平均

时间:2017-05-11 23:04:49

标签: sql postgresql

我想计算具有每日数据的变量的每个场地的月平均值。我的日期变量的数字格式为“YYYYMMDD”。 我的数据如下:

date        venue   metric
20150203    1       0.78
20150204    1       0.65
20150205    1       0.90
20150206    1       0.40
20150203    2       0.74
20150204    2       0.77
20150205    2       0.88
20150206    2       0.64
20150203    3       0.78
20150204    3       0.92
20150205    3       0.94
20150206    3       0.60

3 个答案:

答案 0 :(得分:1)

您应该将日期存储为日期而不是数字,而不管数据库是什么。无论如何,以下内容应该适用于任何数据库:

select floor(date / 100) as yyyymm, venue, avg(metric)
from t
group by floor(date / 100), venue;

答案 1 :(得分:1)

假设您正在使用PostgreSQL:

SELECT
    month,
    venue,
    AVG(metric)
FROM (
    SELECT 
        EXTRACT(MONTH FROM TO_DATE(CAST(your_date_field AS TEXT), 'YYYYMMDD')) AS month, venue, metric
    FROM 
        your_table
    ) AS sub
GROUP BY
    month, venue;

答案 2 :(得分:1)

试试这个:

SELECT SUBSTRING(DATE, 5,2) AS MONTH, VENUE, AVG (METRIC)
FROM TABLENAME
GROUP BY SUBSTRING(DATE, 5,2), VENUE

另外,我同意这里的每个人你应该将日期存储为日期值。