sql - 获取客户年初至今的支出
问题描述
我正在尝试获取所有客户的列表以及他们从 1 月到 10 月每个月花了多少钱。
我有一个用户表和一个订单表。Orders 表有一个 user_id 字段,该字段链接到 Users 表的 id,因此一个用户可以有很多订单,也可以没有。
我有这个查询,它将给我订单数量和用户在一月份花了多少钱。我怎样才能改变这个,所以我可以获得每个月的订单数量和总支出的列?此外,对于这个查询,我没有得到订单数为 0 的用户的任何结果。
select users.id, users.first_name, users.last_name, count(orders.id) as num_of_orders, sum(orders.total) as total_spent
from users
left join orders on users.id = orders.user_id
where orders.created_at between '2020-01-01 00:00:00' and '2020-01-31 23:59:00'
group by users.id
order by num_of_orders asc
解决方案
在您的查询之上构建 - 构建一组月份(months
CTE),orders
按订单的月份和users
ID 将其加入。按用户和期间分组。我假设这users.id
是一个主键,所以你不需要按其他users
属性分组。对于没有订单的月份/用户,您将获得零结果。
with month_periods(m) as
(
select date_trunc('month', s)::date
from generate_series('2020-01-01'::timestamp, '2020-10-01', interval '1 month') s
)
select month_periods.m month_period, users.id, users.first_name, users.last_name,
count(orders.id) as num_of_orders, sum(orders.total) as total_spent
from month_periods
left join orders on date_trunc('month', orders.created_at)::date = month_periods.m
left join users on users.id = orders.user_id
group by users.id, month_periods.m
order by num_of_orders;
推荐阅读
- c# - C# 如何在特定偏移处找到字节 [] 模式
- gremlin - Gremlin - 顶点的有序列表,具有最快的相关顶点
- arrays - 如何实施
我在数组中使用 <List.Accordion 时遇到了一些困难。我想在打开时更改标题颜色。跟随有错误的零食。 https://snack.expo
- python - Pandas - 无效的密钥问题
- python - 如何专注于 div 标签内且未显示的输入标签?
- javascript - 将一个 json 映射到另一个 json
- reactjs - 如何摆脱 ReactJS 的 CSS 模块名称中的“.module”部分?
- android - Xamarin 形成 Android - Alarmmanager 未在特定时间间隔触发
- python-3.x - 如何在 Scrapy 中用 tbody 抓取这个 HTML 结构?
- html - 单击按钮时未显示 Ng 容器