postgresql - Postgres如何获得日期之间空数据的总和0,月份数
问题描述
我有一个表叫 sumof coin ,我试图按月获取总和硬币组。我写了查询
SELECT DATE_PART('month', date) AS MONTH,
NULLIF(SUM(GET_COUNT),
0) AS TOTAL
FROM SUMMARY_COINS
AND date >= '2020-12-01'
AND date <= '2021-05-01'
GROUP BY MONTH
ORDER BY MONTH ASC
我得到如下结果
3 22
4 77
5 34
我的愿望输出是
12 0
2 0
3 22
4 77
5 34
这里我使用的是 NULLIF,但为什么不得到月份总数 0,这个月的数据为空?
解决方案
您的表不包含所有月份的数据,这就是您的查询缺少某些月份的原因。
您可以做的是使用递归 CTE 创建一个包含所有月份的结果集,然后对您的表进行 LEFT 连接以进行聚合:
WITH RECURSIVE months(month) AS (
SELECT 1
UNION ALL
SELECT month + 1 FROM months WHERE month < 6
)
SELECT m.month,
COALESCE(SUM(GET_COUNT), 0) total
FROM months m LEFT JOIN SUMMARY_COINS s
ON DATE_PART('month', s.date) = m.month
AND s.date >= '2021-01-01' AND s.date <= '2021-06-01'
GROUP BY m.month
ORDER BY m.month;
查看简化的演示。
推荐阅读
- c++ - 如何在没有任何库但来自 C++ 的标准库的情况下处理图像中的边缘像素?
- django - 中间件设置
- javascript - 无法在本机反应中的两个组件之间传递值
- android - 实现嵌套查看器的最佳方法
- azure - 使用 Azure Powershell 从组 AppRole 分配中获取 Azure AD 应用角色名称
- c++ - 了解 c++ 中 decltype 返回的内容
- python - Python按字母顺序将列表转换为字典
- react-native - 我如何更新或将徽章计数从组件传递到 Tab.Navigator。反应原生
- actionscript-3 - 如何创建随机名称选择器?动作脚本
- java - 创建一个Java循环,其中一个变量上升到99,而另一个变量下降到0