我需要在 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 查询的速度。感谢您提供的任何帮助。
最佳答案
每年计数:
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)
关于sql - COUNT 和 GROUP BY 随着时间的推移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865176/