我的表有列:topic,person,published_date。我想创建一个查询,帮助我计算每个人在每个季度在特定主题中写的次数。例如:
topic person published_date
'world' JS 2016-05-05
'world' JS 2016-05-10
'nature' AR 2016-12-01
应该返回类似
的内容topic person quarter how_many_times
'world' JS 2 2
'nature' AR 4 1
我可以按主题和人物分组
select topic, person, published_date, count(*) from table group by topic, person, published_date
但是如何将group_date发布到宿舍?
答案 0 :(得分:10)
假设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
如果日期可能属于不同年份,您可能希望将年份添加到选择和分组中。
答案 1 :(得分:0)
如果某人也需要年份,则可以使用此年份:
SELECT (extract(year from published_date)::text || '.Q' || extract(quarter from published_date)::text) as quarter
这将以2018.Q1
的形式返回值。
它如何工作?它提取年份和季度(均为double precision
类型),并将其转换为字符串,然后以可读的方式将整体串联起来。
答案 2 :(得分:0)
如果需要季度和年份,可以使用date_trunc:
SELECT
date_trunc('quarter', published_date) AS quarter
这将日期四舍五入到该季度的开始,例如2020-04-01
,其优点是管道中的后续步骤可以像正常日期一样读取它。
(与extract(extract(quarter FROM published_date)
)比较,它给出了四分之一的数字,即1、2、3或4。)