我在 Postgres 服务器上有以下数据库表:
id date Product Sales 1245 01/04/2013 Toys 1000 1245 01/04/2013 Toys 2000 1231 01/02/2013 Bicycle 50000 456461 01/01/2014 Bananas 4546
我想创建一个查询,该查询给出列的SUM值,Sales并按月和年对结果进行分组,如下所示:
SUM
Sales
Apr 2013 3000 Toys Feb 2013 50000 Bicycle Jan 2014 4546 Bananas
有没有一种简单的方法可以做到这一点?
select to_char(date,'Mon') as mon, extract(year from date) as yyyy, sum("Sales") as "Sales" from yourtable group by 1,2
应 Radu 的要求,我将解释该查询:
to_char(date,'Mon') as mon,: 将“日期”属性转换为月份短格式的定义格式。
to_char(date,'Mon') as mon,
extract(year from date) as yyyy: Postgresql 的 “extract” 函数用于从 “date” 属性中提取 YYYY 年份。
extract(year from date) as yyyy
sum("Sales") as "Sales":SUM() 函数将所有“Sales”值相加,并提供区分大小写的别名,并使用双引号保持区分大小写。
sum("Sales") as "Sales"
group by 1,2: GROUP BY 函数必须包含 SELECT 列表中不属于聚合的所有列(也就是不在 SUM/AVG/MIN/MAX 等函数内的所有列)。这告诉查询应该对每个唯一的列组合应用 SUM(),在本例中是月份和年份列。”1,2” 部分是一种速记,而不是使用列别名,尽管最好使用完整的 “to_char(…)” 和 “extract(…)” 表达式以提高可读性。
group by 1,2