gpt4 book ai didi

sql - 如何在 Postgres 中查询以按创建月份对记录进行分组? ( :created_at datetime column)

转载 作者:行者123 更新时间:2023-11-29 14:05:04 25 4
gpt4 key购买 nike

我有这个 Ruby 代码:

def visits_chart_data(domain)
last_12_months.collect do |month|
{ created_at: month, count: domain.visits.created_on_month(month).count }
end
end

def last_12_months
(0..11).to_a.reverse.collect{ |month_offset| month_offset.months.ago.beginning_of_month }
end

CreatedOnMonth 只是一个范围:

scope :created_on_month, -> (month = Time.now) { where{ (created_at >= month.beginning_of_month) & (created_at <= month.end_of_month) } } 

created_at 只是一个标准的日期时间戳。

如何优化它以进行一次查询而不是 12 次查询?

我看到有些人使用 GROUP_BY,但我对 PostgreSQL 不是很了解,无法自己构建这样的查询。查询应按一年中的月份对记录进行分组并返回计数。也许有人可以帮助我。谢谢。

最佳答案

使用 date_trunc()如果您想按每年的每个月分组,请在 GROUP BY 子句中使用函数:

GROUP BY date_trunc('month', created_at)

使用EXTRACT()GROUP BY 子句中使用函数,如果您想按每年的每个月进行分组:

GROUP BY EXTRACT(MONTH FROM created_at)

关于sql - 如何在 Postgres 中查询以按创建月份对记录进行分组? ( :created_at datetime column),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23757803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com