sql - 尝试选择数据,然后对 mariadb 中的所选数据进行平均
问题描述
SELECT counts FROM (SELECT COUNT( ch_id
) AS counts FROM tbl_warrants_checked WHERE status
= "active" GROUP BY dateChecked
);
解决方案
这使用 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
其与每天找到的计数一起生成:
-- 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 |
+---------+
注意:我们也可以计算缺失的天数,并在没有递归和的情况下在最终计算中使用它JOIN
。还有另一种简化。
推荐阅读
- markdown - Docusaurus 2 在降价文件中包含视频文件
- javascript - 为什么 react-native 视图的行为与无害的内联样式不同?
- amazon-web-services - 如何修复因“FailureReason”而失败的 SageMaker 数据质量监控计划作业:“作业输入没有数据”
- r - Windows 与 MacOS 上的 R + Studio 错误
- jenkins - 如何避免在 Jenkins 中为 bat 命令插入敏感变量
- javascript - this.options.embeds?.map 不是函数 discord.js
- c++ - 使用位域时如何获取起始位数(C++)
- spring - 将 Spring Security 与 Forum Sys ldap 测试服务器连接起来
- sql - 查询错误:列名 ICUSTAY_ID 不明确。在 BigQuery 中使用多个子查询
- jcl - 用于编译和链接包含更新 CICS 参数的 SIT 的 CICS JCL 过程