我正在尝试返回 2015 年每个月的总销售额。我的表包含 2000 年到 2019 年的数据。当我在下面编写查询时,我会得到所有年份每个月的销售额。如何将范围缩小到 2015 年?
SELECT extract(year FROM ord_date) AS year
, extract(month FROM ord_date) AS month
, SUM(order_tot) AS Total_Sales
FROM dsci_504.orders
GROUP BY extract(year FROM ord_date), extract(month FROM ord_date)
ORDER BY year, month;
我的输出的前四行应如下所示:
年 | 月 | 总销售额 |
---|---|---|
2015 | 1 | 55527.73 |
2015 | 2 | 53219.29 |
2015 | 3 | 53661.72 |
2015 | 4 | 109908.03 |
已澄清“没有
WHERE
条款”是一个误解。
使用正确的“可控制”谓词以获得最佳性能。
使用单个截断的时间戳列更简单、更便宜:
SELECT date_trunc('month', ord_date) AS mon
, sum(order_tot) AS total_sales
FROM dsci_504.orders
WHERE ord_date >= '2005-01-01' -- valid as date or timestamp constant
AND ord_date < '2006-01-01'
GROUP BY 1
ORDER BY 1;
ord_date
可以输入 date
或 timestammp
,两者都适用。
甚至适用于timestamptz
。如果没有明确定义,Postgres 会假定当前会话的时区。
如果您确实需要
numeric
年和月的输出:
SELECT extract(year FROM mon) AS year
, extract(month FROM mon) AS month
, total_sales
FROM (
SELECT to_char(date_trunc('month', ord_date), 'YYYY') AS mon
, sum(order_tot) AS total_sales
FROM dsci_504.orders
WHERE ord_date >= '2005-01-01' -- valid timestamp constant
AND ord_date < '2006-01-01'
GROUP BY 1
ORDER BY 1
) sub;