我在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的“提取”功能用于从“日期”属性中提取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()应用于每个唯一的列组合,在这种情况下为月和年列。尽管可能最好使用完整的“ to_char(…)”和“ extract(…)”表达式以提高可读性,但“ 1,2”部分是简化的方式,而不是使用列别名。
group by 1,2