我需要在PostgreSQL中按日,周,月等创建销售报告。我有以下表格设置:
tbl_products:
id INT
name VARCHAR
tbl_purchase_order:
id INT
order_timestamp TIMESTAMP
tbl_purchase_order_items:
id INT
product_id INT (FK to tbl_products.id)
order_id (FK to tbl_purchase_order.id)
我需要创建一个SQL查询,该查询返回在给定时间范围内购买给定产品的次数。也就是说,我需要查询给定产品ID在特定月份,日,年等的采购订单项中出现的次数。在之前的问题中,我学习了如何使用date_trunc()将TIMESTAMP列截断为我关心的那段时间。现在我面临着如何正确执行COUNT和GROUP BY。
我尝试了使用COUNT(XXX)和GROUP BY XXX的各种组合的几个查询,但似乎从来没有想出我期待的内容。有人可以给我指导如何构建此查询吗?我更像是一名Java开发人员,所以我仍然在加速SQL查询。感谢您提供的任何帮助。
答案 0 :(得分:4)
每年计数:
SELECT oi.product_id,
extract(year from po.order_timestamp) as order_year
count(*)
FROM purchase_order_items oi
JOIN purchase_order po ON po.id = oi.order_id
GROUP BY extract(year from po.order_timestamp)
每月计数器:
SELECT oi.product_id,
extract(month from po.order_timestamp) as order_month
extract(year from po.order_timestamp) as order_year
count(*)
FROM purchase_order_items oi
JOIN purchase_order po ON po.id = oi.order_id
GROUP BY extract(year from po.order_timestamp),
extract(month from po.order_timestamp)
答案 1 :(得分:1)
请参阅postgres日期时间函数http://www.postgresql.org/docs/8.1/static/functions-datetime.html
我建议您使用提取功能,将年,月和日拆分为结果集中的谨慎列,然后根据您的要求进行分组。