尝试选择数据,然后对 mariadb 中的所选数据进行平均
Posted
技术标签:
【中文标题】尝试选择数据,然后对 mariadb 中的所选数据进行平均【英文标题】:Trying to select data and then do a average on the selected data in mariadb 【发布时间】:2021-10-13 06:44:00 【问题描述】:SELECT 计数
FROM (SELECT COUNT(ch_id
) AS 计数
FROM tbl_warrants_checked
在哪里status
=“活动”
分组dateChecked
);
【问题讨论】:
请描述你想要什么。样本数据和期望的结果会有所帮助。 我想计算 ID 列并按 dateChecked 分组,女巫是他们检查权证的那一天,然后我需要当天检查的权证数量的平均值,然后发布到我的 dahsbaord 作为上个月每天检查的权证的平均值 【参考方案1】:这使用 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 JOIN
s,其中包含每天找到的计数:
-- 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
的情况下将其用于最终计算。还有另一种简化。
【讨论】:
以上是关于尝试选择数据,然后对 mariadb 中的所选数据进行平均的主要内容,如果未能解决你的问题,请参考以下文章
在Flutter中的所选BottomNavigationBarItem顶部显示图块