![]() |
不要命的汉堡包 · 确定已安装的 .NET Framework ...· 4 月前 · |
![]() |
旅行中的砖头 · 从Chrome内容脚本扩展访问iframe- ...· 10 月前 · |
![]() |
儒雅的针织衫 · Vue使用pdfobject实现预览pdf的 ...· 1 年前 · |
![]() |
豪爽的花生 · Docker:发生了一个错误:ffmpeg退 ...· 1 年前 · |
![]() |
憨厚的脸盆 · 常数项可以为负数吗-掘金· 1 年前 · |
我在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
有没有简单的方法可以做到这一点?
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(...)“表达式以提高可读性。
实际上,
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;
我不敢相信被接受的答案有这么多人支持--这是一种可怕的方法。
下面是正确的方法,使用 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)
如果您不想选择日期。
有另一种方法可以使用postgres中的date_part()函数来实现此结果。
SELECT date_part('month', txn_date) AS txn_month, date_part('year', txn_date) AS txn_year, sum(amount) as monthly_sum
FROM yourtable
GROUP BY date_part('month', txn_date)
谢谢
请看本教程-> https://www.postgresqltutorial.com/postgresql-group-by/ 的示例6
您需要调用组上的函数,而不是调用您在select上创建的虚拟属性的名称。我正在做上面所有答案推荐的操作,但我得到了一个
column 'year_month' does not exist
错误。
对我起作用的是:
SELECT
date_trunc('month', created_at), 'MM/YYYY' AS month
"orders"
GROUP BY
![]() |
憨厚的脸盆 · 常数项可以为负数吗-掘金 1 年前 |