数据库语句查询一年平均值

在PHP数据库语句去查询字段id一年每个月的平均值并输出
表名是book,字段名是id

我是这样想的。如果一个月有多次测量数据。那要求这个数据的平均。如果一个月只有几天没有测量数据,就是月平均是将每一天的平均数据统计出来。年平均就是将每个月的数据平均出来!突然觉得这个复杂了。求各位支支招!谢谢!

先链接上PHP,sql语句这么写:

$sql = "SELECT YEAR(date) AS year, MONTH(date) AS month, AVG(value) AS average
        FROM book
        GROUP BY YEAR(date), MONTH(date)
        ORDER BY YEAR(date), MONTH(date)";
$stmt = $pdo->query($sql);

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $year = $row['year'];
    $month = $row['month'];
    $average = $row['average'];
    echo "Year: $year, Month: $month, Average: $average\n";
}

可以使用MySQL中的DATE_FORMAT、MONTH和AVG函数来实现。

假设数据表名为book,要求字段id一年每个月的平均值,可以使用以下SQL语句:

SELECT DATE_FORMAT(`date`, '%Y-%m') AS `month`,
       AVG(`id`) AS `avg_id`
FROM `book`
WHERE `date` BETWEEN '2022-01-01' AND '2022-12-31'
GROUP BY MONTH(`date`);

其中,使用DATE_FORMAT函数将日期格式化为年月的格式('%Y-%m'),以便于按照月份分组;使用MONTH函数获取日期的月份;使用AVG函数计算每个月中id字段的平均值。WHERE子句用于筛选指定年份内的数据。

以上仅为示例代码,具体语句需要根据实际情况进行修改。

可以使用SQL的GROUP BY和AVG()聚合函数

SELECT 
    YEAR(date_col) AS year, 
    AVG(monthly_avg) AS annual_avg 
FROM (
    SELECT 
        MONTH(date_col) AS month,
        AVG(id) AS monthly_avg 
    FROM book 
    GROUP BY month
) AS monthly_avgs 
GROUP BY year;