当前位置: 首页 > 面试题库 >

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

靳祺然
2023-03-14
问题内容

我在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

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


问题答案:
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的“提取”功能用于从“日期”属性中提取YYYY年。

sum("Sales") as "Sales" :SUM()函数将所有“ Sales”值相加,并提供区分大小写的别名,并使用双引号保持区分大小写。

group by 1,2注意:GROUP BY函数必须包含SELECT列表中不属于聚合的所有列(也就是,所有列不在SUM / AVG / MIN /
MAX等函数之内)。这告诉查询应将SUM()应用于每个唯一的列组合,在这种情况下为月和年列。尽管可能最好使用完整的“ to_char(…)”和“
extract(…)”表达式以提高可读性,但“ 1,2”部分是简化的方式,而不是使用列别名。



 类似资料:
  • 有没有一个简单的方法可以做到这一点?

  • 问题内容: 我的表格显示了各个国家/地区进行的搜索量以及进行搜索的日期,我想要一个查询来向我显示2012年和2013年每个月的搜索量,我需要为月份添加单独的列,年份和搜索次数。我以前使用过下面的查询,该查询返回每周进行的搜索量,但我想将其更改为仅2012和2013年每月进行的搜索。 问题答案: 只需使用MONTH()和YEAR()函数

  • 问题内容: 给定一个在每行上都带有时间戳的表,您将如何格式化查询以适合此特定的json对象格式。 我正在尝试将json对象组织成年/月。 json以查询为基础: 这是我到目前为止的查询- 该查询正在分解,因为它(可预测地)将不同年份组合在一起。 问题答案: 是你想要的。

  • 问题内容: 我正在尝试按 年 和 月 对表进行分区。我将通过其划分分区的列是具有ISO格式(‘20150110’,20150202’等)的日期时间类型列。 例如,我有2010年,2011年和2012年的销售数据。我希望数据按年份进行分区,并且每年也按月份进行分区。(2010/01,2010/02,… 2010/12,2011/01,… 2015/01 …) 前任: Sales2010Jan,Sal

  • 问题内容: 我需要从具有列的表中抓住一些记录,这是一个(没有时间)。我只需要通过比较年份和月份来过滤记录。例如,我希望所有出生于1990年3月的用户。日子并不重要。 您如何处理? 问题答案: 您可以使用 它将对HQL有效

  • 问题内容: 我正在尝试返回一些在滚动12个月内分散的结果,例如: 如何在日期范围内分散结果,并在第一列中填充月份名称? 在MSSQL中,它将类似于: 但这是针对Oracle数据库的,因此DATEPART和DateTime不可用。 我的问题表大致为: 问题答案: 使用: 您还可以使用: