小编典典

在 postgresql 中按月和年对查询结果进行分组

all

我在 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并按月和年对结果进行分组,如下所示:

Apr    2013    3000     Toys
Feb    2013    50000    Bicycle
Jan    2014    4546     Bananas

有没有一种简单的方法可以做到这一点?


阅读 91

收藏
2022-06-18

共1个答案

小编典典

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,: 将“日期”属性转换为月份短格式的定义格式。

extract(year from date) as 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(…)” 表达式以提高可读性。

2022-06-18