我在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,并按月份和年份对结果进行分组,如下所示:
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,:将“date”属性转换为定义的月份短格式。
提取(年份从日期)作为yyyy:Postgresql的“extract”函数用于从“date”属性提取YYYY年。
sum(“Sales”)as“Sales”:SUM()函数将所有“Sales”值相加,并提供一个区分大小写的别名,并使用双引号保留区分大小写。
group by 1,2:GROUP BY函数必须包含SELECT列表中不属于聚合(也就是不在SUM / AVG / MIN / MAX等函数内的所有列)的所有列。这告诉查询,应该为每个唯一的列组合应用SUM(),在本例中为月和年列。 “1,2”部分是一个简写,而不是使用列别名,尽管最好使用完整的“to_char(…)”和“extract(…)”表达式来提高可读性。