问题描述
我无法在数据库中使用sum()
函数。我正在查询表purchases
中的store_id
(从表stores
中检索),month
(+年)购买时间(存储为timestamp
,没有时区指定),以及sum
销售收入中的total
(按月)。问题在于没有聚合发生,因此每个销售的总计被报告为给定商店的每月销售总计。我想我没有正确使用`sum()',但是我还没有找到解决方案。建议和意见表示赞赏。
SELECT --month of purchase,total sales
purchases.store_id AS store_id,TO_CHAR(timestamp,'Month'||'YYYY') AS month,sum(total) AS total_sales
FROM purchases
GROUP BY store_id,timestamp,purchases.total
ORDER BY month,store_id;
解决方法
您要按timestamp
分组,而想按月分组。
考虑:
SELECT
store_id,date_trunc('month',timestamp) AS month,sum(total) AS total_sales
FROM purchases
GROUP BY store_id,timestamp)
ORDER BY month,store_id;
这给您month
作为截断到一个月的第一天的日期:我发现这比格式化的字符串更有意义,但是如果您将其更改回原始的to_char()
表达式,喜欢。
请注意,PostgreSQL在GROUP BY
和ORDER BY
子句中也支持位置参数,您可以这样写:
SELECT
store_id,sum(total) AS total_sales
FROM purchases
GROUP BY 1,2
ORDER BY 2,1;