Postgres按季度分组

ado*_*lzi 5 postgresql

我有列的表:topic,person,published_date.我想创建一个查询,帮助我计算每个人在每个季度在特定主题中写的次数.例:

topic person published_date

'world'  JS   2016-05-05 
'world'  JS   2016-05-10
'nature'  AR   2016-12-01
Run Code Online (Sandbox Code Playgroud)

应该返回类似的东西

topic person quarter how_many_times
'world'  JS     2          2
'nature' AR     4          1
Run Code Online (Sandbox Code Playgroud)

我可以按主题和人分组

select topic, person, published_date, count(*) from table group by topic, person, published_date
Run Code Online (Sandbox Code Playgroud)

但是小组如何发表日期?

jpw*_*jpw 11

假设它published_date是一个日期类型列,您可以使用如下extract函数:

select 
  topic, 
  person,
  extract(quarter from published_date) as quarter, 
  count(*)
from 
  table1
group by 
  topic, 
  person,
  extract(quarter from published_date)
order by 
  extract(quarter from published_date) asc
Run Code Online (Sandbox Code Playgroud)

示例SQL小提琴

如果日期可能属于不同年份,您可能希望将年份添加到select和group by.

  • 哇,太好了,非常感谢!+1用于示例SQL小提琴 (2认同)

Der*_*ill 10

如果您想要季度和年份,可以使用date_trunc

SELECT
  date_trunc('quarter', published_date) AS quarter
Run Code Online (Sandbox Code Playgroud)

这给出了四舍五入到季度开始的日期,例如2020-04-01,并且具有管道中的后续步骤可以像正常日期一样读取它的优点。

(这与extract ( )相比extract(quarter FROM published_date),extract ( ) 给出季度数,即 1、2、3 或 4。)