【问题标题】:Mysql: query to get average, maximum and minimum from date rangeMysql:查询以获取日期范围的平均值,最大值和最小值
【发布时间】:2016-07-09 17:21:10
【问题描述】:

我有一个只有三个字段的表格:

userID (integer, key, autoincrement)
date (Y-m-d format)
hits (integer)

我每天都在其中填充数据(用户 ID 和日期是唯一的),所以我的值如下:

1 | '2016-01-01' | 200
1 | '2016-01-02' | 289
2 | '2016-01-15' | 389
2 | '2016-01-16' | 390
....

我怎么能得到:

  • 上周的平均每日点击次数?
  • 上个月的平均每周点击次数?
  • 上周的最大每日点击次数
  • 上周的最低每日点击次数

t h a n k s

【问题讨论】:

  • 编写查询将是一个好的开始。提示:使用aggregate 函数。

标签: mysql


【解决方案1】:
SELECT AVG(hits) FROM table WHERE date BETWEEN 'beginning' and 'end';

这里:'beginning'是星期或月份的开始日期,格式为'yyyy-mm-dd'; 'end' 是相同的,但结束日期。

SELECT MAX(hits) FROM table WHERE date BETWEEN 'beginning' and 'end';
SELECT MIN(hits) FROM table WHERE date BETWEEN 'beginning' and 'end';

例子:

SELECT AVG(hits) FROM table WHERE date BETWEEN '2016-01-01' and '2016-01-31';
SELECT MAX(hits) FROM table WHERE date BETWEEN '2016-01-01' and '2016-01-31';

【讨论】:

  • 谢谢你,里奥。我错过了澄清我的表存储累积数据(对此感到抱歉),以便:第 1 天包含直到第 1 天的数据,而不仅仅是第 1 天的数据。第 2 天包含第 2 天之前的累积数据。这样 AVG 会给我一个平均值,包括累积数据。有什么我可以用来直接从 mysql 获取 AVG、MAX 或 MIN 的东西吗?否则,我认为我需要获取每个时间段内的所有数据,然后通过减去其前任的每个日期点击,用 PHP 计算 AVG、MIN 和 MAX
  • 哦,好吧,如果我理解正确,您的实际日期条目(每条记录)与其他一些列中的数据一一对应。因此,例如,对于给定日期,您从其他日期“累积”了点击次数。在这种情况下,我会说最好的解决方案是清理数据以更轻松地处理它。最好的方法可能是改变你的数据库填充数据的方式,这样你以后可以更容易地处理它,或者编写一个脚本来“解析”你的数据(如果你已经有太多重要的数据,你可能会这样做)。
  • 再次感谢@LeoSkhrnkv
【解决方案2】:

对于上周的平均每日点击次数,尝试执行以下操作:

SELECT date, AVG(hits) 
FROM table 
WHERE date <= '2016-03-19' AND date >= '2016-03-13' 
GROUP BY date

Max 和 Min,用“AVG”代替“MAX”或“MIN”。

【讨论】:

    猜你喜欢
    • 2019-11-13
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多