mysql - 如何在 MySQL 中对三个具有不同平均值的变量进行分组?

标签 mysql sql

+-----------------+---------------------+
|    date_time    |                vale |
+-----------------+---------------------+
| 12/13/2015 0:00 |        56.75        |
| 12/13/2015 0:15 |        208.75       |
| 12/13/2015 0:30 |        58.8         |
| 12/13/2015 0:45 |        61.79        |
| 12/13/2015 1:00 |        288.65       |
| 12/13/2015 1:15 |        89.1         |
| 12/13/2015 1:30 |        28.9         |
| 12/13/2015 1:45 |        57.04        |
| 12/14/2015 1:00 |        63.87        |
| 12/14/2015 1:15 |        219.83       |
| 12/14/2015 1:30 |        64.95        |
| 12/14/2015 1:45 |        65.24        |
| 12/14/2015 2:00 |        55.67        |
| 12/14/2015 2:15 |        21.63        |
| 12/14/2015 2:30 |        56.75        |
| 12/14/2015 2:45 |        57.04        |
+-----------------+---------------------+

我有 date_time 及其各自的值,现在如何根据日、周和小时取平均值,如下所示:

+-----------------+-----------------+-----------+----------+
|    date_time    |        hour_avg |   day_avg | week_avg |
+-----------------+-----------------+-----------+----------+
| 12/13/2015 0:00 | 96.52           |   106.2   |     90.9 |
| 12/13/2015 1:00 | 115.9           |   106.2   |     90.9 |
| 12/14/2015 1:00 | 103.4           |   75.6    |     90.9 |
| 12/14/2015 2:00 | 47.7            |   75.6    |     90.9 |
+-----------------+-----------------+-----------+----------+

最佳答案

实现它的一种方法是使用 GROUP BY 日期和小时 + 整天/周的相关子查询:

SELECT 
   DATE_ADD(CAST(date_time AS DATE), INTERVAL  HOUR(date_time) HOUR) AS date_time
   ,ROUND(AVG(vale),1) AS hour_avg
   ,ROUND((SELECT AVG(vale) FROM tab t2 WHERE DATE(t2.date_time) = DATE(t.date_time) GROUP BY DATE(date_time)),1) AS  day_avg
   ,ROUND((SELECT AVG(vale) FROM tab t2 WHERE WEEK(t2.date_time) = WEEK(t.date_time) AND YEAR(t.date_time) = YEAR(t2.date_time)  GROUP BY WEEK(date_time)),1) AS  week_avg
FROM tab t
GROUP BY DATE(date_time), HOUR(date_time);

SqlFiddleDemo

输出:

╔═════════════════════════════╦═══════════╦══════════╦══════════╗
║         date_time           ║ hour_avg  ║ day_avg  ║ week_avg ║
╠═════════════════════════════╬═══════════╬══════════╬══════════╣
║ December, 13 2015 00:00:00  ║ 96.5      ║ 106.2    ║ 90.9     ║
║ December, 13 2015 01:00:00  ║ 115.9     ║ 106.2    ║ 90.9     ║
║ December, 14 2015 01:00:00  ║ 103.5     ║ 75.6     ║ 90.9     ║
║ December, 14 2015 02:00:00  ║ 47.8      ║ 75.6     ║ 90.9     ║
╚═════════════════════════════╩═══════════╩══════════╩══════════╝

关于mysql - 如何在 MySQL 中对三个具有不同平均值的变量进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34450057/

相关文章:

android - "How to retrieve data from multiple tables using cursors in android studio"

mysql - 使用另一表记录更新一个表

mysql - VARCHAR(900) 可以吗?还是应该在 MySQL 中使用 TEXT?

MySQL 插入值和一些要从其他表中选择的值

sql - HQL 与 SQL/Hibernate netbeans HQL 编辑器

sql - 将 SQLite FTS3 与 INTEGER 列一起使用

sql - PostgreSQL:返回列之间的间隙和值不匹配

php - 从数据库表构建照片数组

php - 不同的搜索词顺序在 Symfony 查询中应该有相同的结果

php - 2006 : MySQL server has gone away