gpt4 book ai didi

ruby-on-rails - 按 created_at 对关联模型进行分组和计数

转载 作者:行者123 更新时间:2023-11-29 13:08:25 24 4
gpt4 key购买 nike

我有一个 Variant 模型,它有_many PageViewsClicks。我想返回一个对象数组,如下所示:

[
{ day: 'Thu, 19 Sep 2019', page_views: 10, clicks: 2, rate: 0.2 },
{ day: 'Wed, 18 Sep 2019', page_views: 110, clicks: 32, rate: 0.29 },
{ day: 'Tue, 17 Sep 2019', page_views: 113, clicks: 19, rate: 0.17 },
... etc ...
]

按创建日期分组,然后是在该日期创建的每个模型的计数。 rate 是点击率,即 clicks 的数量/page_view 的数量。

理想情况下,我会在 sql 中完成这一切。如果不在 SQL 中执行 rate 计算更简单,我可以在 Rails 中执行。

使用 groupdate gem 可能在这里工作,但我认为它以不同的格式返回,我不太明白如何自定义它以返回我在此处描述的格式。

最佳答案

我无法使用 AR 获得具体的东西。这是一个可能有效的 PostgreSQL 版本:

SELECT v.date,
(SELECT COUNT(*) FROM clicks WHERE date(created_at) = v.date) AS clicks,
(SELECT COUNT(*) FROM page_views WHERE date(created_at) = v.date) AS page_views
FROM (SELECT date(created_at) AS DATE FROM variants GROUP BY date) v

有趣的是,这会返回相同的 SQL 查询,但会提示顺序或将别名作为空数组返回:

Variant
.select(
'v.date,
(SELECT COUNT(*) FROM clicks WHERE date(created_at) = v.date) AS clicks,
(SELECT COUNT(*) FROM page_views WHERE date(created_at) = v.date) AS page_views'
)
.from(
Variant.select('date(created_at) AS date').group(:date),
:v
)

关于ruby-on-rails - 按 created_at 对关联模型进行分组和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58189864/

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