我在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
我想创建一个查询,该查询给出Sales
列的SUM
,并按月和年对结果进行分组,如下所示:
Apr 2013 3000 Toys
Feb 2013 50000 Bicycle
Jan 2014 4546 Bananas
有没有简单的方法可以做到这一点?
发布于 2013-07-05 23:26:59
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“属性转换为定义的短格式month。
extract(year from date) as yyyy
:Postgresql的" extract“函数用于从"date”属性中提取YYYY年份。
sum("Sales") as "Sales"
:SUM()函数将所有"Sales“值相加,并提供区分大小写的别名,并使用双引号保持区分大小写。
group by 1,2
:GROUP BY函数必须包含选择列表中不属于聚合的所有列(也称为SUM/AVG/MIN/MAX等函数中不包含的所有列)。这告诉查询应该对每个唯一的列组合应用SUM(),在本例中是month和year列。"1,2“部分是一种速记形式,而不是使用列别名,不过最好使用完整的"to_char(...)”和"extract(...)“表达式以提高可读性。
发布于 2014-11-19 02:14:01
我不敢相信被接受的答案有这么多人支持--这是一种可怕的方法。
下面是正确的方法,使用date_trunc
SELECT date_trunc('month', txn_date) AS txn_month, sum(amount) as monthly_sum
FROM yourtable
GROUP BY txn_month
这是一种糟糕的做法,但如果你使用
GROUP BY 1
在一个非常简单的查询中。
您还可以使用
GROUP BY date_trunc('month', txn_date)
如果您不想选择日期。
发布于 2014-10-04 04:02:20
实际上,to_char
可以让你一下子找到年份和月份!
select to_char(date('2014-05-10'),'Mon-YY') as year_month; --'May-14'
select to_char(date('2014-05-10'),'YYYY-MM') as year_month; --'2014-05'
或者在上面用户示例的情况下:
select to_char(date,'YY-Mon') as year_month
sum("Sales") as "Sales"
from some_table
group by 1;
https://stackoverflow.com/questions/17492167
复制相似问题