【发布时间】:2021-10-13 06:44:00
【问题描述】:
【问题讨论】:
-
请描述你想要什么。样本数据和期望的结果会有所帮助。
-
我想计算 ID 列并按 dateChecked 分组,女巫是他们检查权证的那一天,然后我需要当天检查的权证数量的平均值,然后发布到我的 dahsbaord 作为上个月每天检查的权证的平均值
【问题讨论】:
这使用 MariaDB 10.5,但应该适用于 ~10.2.2 之后的任何版本。
如果我们假设每天都有数据,或者我们不关心没有数据的日子,下面将计算自 1 个月前(数据的最后一个月)以来每天的平均检查次数:
-- Average of counts per day since ~1 month ago.
-- Only for days present in the set
SELECT AVG(counts) AS average
FROM (
SELECT COUNT(ch_id) AS counts
FROM tbl_warrants_checked
WHERE status = 'active'
AND dateChecked > (current_date - INTERVAL '1' MONTH)
GROUP BY dateChecked
) AS x
;
示例结果:
+---------+
| average |
+---------+
| 3.2941 |
+---------+
如果我们希望计算缺失天数并将其视为 0,则以下代码生成自 1 个月前以来的天数和LEFT JOINs,其中包含每天找到的计数:
-- Average of counts per day since ~1 month ago.
-- Treat missing days as 0
WITH RECURSIVE dates (date) AS (
SELECT current_date UNION ALL
SELECT date - INTERVAL '1' DAY FROM dates
WHERE date > (current_date - INTERVAL '1' MONTH)
)
SELECT AVG(COALESCE(counts, 0)) AS average
FROM dates AS d
LEFT JOIN (
SELECT dateChecked
, COUNT(ch_id) AS counts
FROM tbl_warrants_checked
WHERE status = 'active'
AND dateChecked > (current_date - INTERVAL '1' MONTH)
GROUP BY dateChecked
) AS x
ON d.date = x.dateChecked
;
示例结果:
+---------+
| average |
+---------+
| 1.7500 |
+---------+
Working test case with data which produces the above results
注意:我们也可以计算缺失的天数,并在没有递归和JOIN 的情况下将其用于最终计算。还有另一种简化。
【讨论】: