sql - COUNT 和 GROUP BY 随着时间的推移

标签 sql postgresql count group-by

我需要在 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/

相关文章:

java - 计算 Java 类的代码行数

sql - 需要将 unix 转换为日期,但某些值已经采用日期格式

ruby-on-rails - 迁移错误

sql - POSTGRESQL pl/pgsql 触发器函数在插入时返回 null

php - 多个 LEFT JOIN 不适用于 SUM()

mysql - 将另一个表中的计数添加到现有查询

swift - 如何跟踪标签中回答的项目?

php - 通过数据库搜索不起作用

php - 将不同行中的值连接到一列中

sql - 当 SQL Server 2012 中没有匹配列时,如何从第一个表中获取所有列