微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取按日期分组的计数列平均值,但满足某些条件

如何解决获取按日期分组的计数列平均值,但满足某些条件

数据样本:

时间 id
2021-01-01 06:00:00 1
2021-01-01 06:00:00 2
2021-01-01 06:00:00 3
... ...
2021-01-01 12:00:00 1
2021-01-01 12:00:00 2
2021-01-01 12:00:00 3
... ...
... ...
2021-01-12 20:00:00 1
2021-01-12 20:00:00 2
2021-01-12 20:00:00 3

在真实数据集中,ids 介于 1 和 9999 之间,dtime 是每 5 分钟,每天 24 小时,我只想在某些时间(例如 06、12,16,20h).

预期输出count(id) 值的平均值,按 DATE(dtime) 分组,但是:

  1. 只应采样某些 TIME(dtime)(例如 06、12、16、20h);
  2. count(id) 应忽略不在 10 到 500 之间的 id
  3. count(id) 应该被丢弃(并且不考虑平均值)如果

输出示例:

DATE(dtime) AVG(count(id))
2021-01-01 31
2021-01-02 29

到目前为止我有

SELECT dtime,count(id)
FROM cron5min
WHERE (TIME(dtime) = '06:00:00' OR TIME(dtime) = '12:00:00' OR TIME(dtime) = '16:00:00' OR TIME(dtime) = '20:00:00') AND id BETWEEN 10 AND 500 AND estado = 1
GROUP BY dtime

然后我使用PHP根据3进行平均和丢弃数据。

我现在只尝试使用 MysqL 语句来执行此操作,而不使用 PHP

解决方法

您需要 2 个级别的聚合:

SELECT DATE(dtime) date,AVG(counter) avg_count
FROM (
  SELECT dtime,COUNT(id) counter
  FROM cron5min 
  WHERE TIME(dtime) IN ('06:00:00','12:00:00','16:00:00','20:00:00')
    AND id BETWEEN 10 AND 500 
    AND estado = 1 
  GROUP BY dtime
  HAVING counter >= 3
) t
GROUP BY date

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。