sql - 使用 Postgres 插入额外的行
问题描述
我正在尝试编写查询以获取每天的总销售额,结果应该包含从 2020-05-01 到当前日期的所有日期,无论当天是否有销售。下面的查询将给出我表中相应日期的销售结果。
select date as DATE, SUM (order_amount_in_eur)
from orders
where date >= '2020-05-01' group by 1;
我想要从 2020-05-01 到今天的附加日期行,这些行在表中不存在,并且在相应日期的销售列中为零/没有销售的值为零。对于从 2020 年 5 月 1 日至今的所有缺失日期,我希望得到如下截图所示的答案。
谢谢
这是我原来的桌子。
解决方案
你会使用一个left join
和generate_series()
:
select gs.dte, coalesce(sum(order_amount_in_eur), 0)
from generate_series('2020-05-01'::date, current_date, interval '1 day') gs(dte) left join
orders o
on o.date = gs.dte
group by gs.dte;
推荐阅读
- react-redux - Redux 中间件和 GraphQL
- mysql - 一个非常大的表的 SQL 分区
- f# - FSharp Charting on Deedle 系列如何将两个系列绘制成一个图表
- sql - 在不同组中跨数据类型进行比较时如何处理潜在的数据丢失
- python - 替换 Numpy 字符串列表中的单个字符
- css - 修复了允许 React 水平和垂直滚动的标题
- r - R(RGui)如何解析多行字符串?
- c++ - 使用 `glm::perspective` 时 Z 值始终为 1 或 -1
- xaml - UWP XAML 在 ContentDialog 后面隐藏阴影
- azure-devops - Azure DevOps REST API 招摇网址