[英]Rails query with Postgres variable usage
我正在尝试创建一个重用变量的Rails Postgres查询。
视频有很多活动(请考虑统计)。 每个活动记录观看的视频和观看的视频的进度(0-100)%
要生成可以分页的视频报告表,我需要查询以获取所有视频观看活动,并且每个视频获得a)总观看次数b)有多少观看的进度(整数)大于或等于90% c)计算观看率超过90%的人的百分比,例如(b / a)* 100
以下代码大致是它的工作方式(真实代码和sudo代码的组合)
Video.joins(:activities)
.where('occurred_at >= ? AND occurred_at <= ?', @start_time, @end_time)
.select('videos.*, COUNT(activities.id) as total_views, COUNT(activities.progress >= 90) as completed_views, case when total_views = 0 then 0.0 else ROUND( 100.0 *(completion_views/ cast(total_views as float)) ) end as percent_completed')
.group('videos.id')
.page(@page).per(@per_page)
如何在选择查询中重用变量total_views和completed_views来创建percent_completed变量并使它们查询工作。 我也意识到计算COUNT(activities.progress >= 90) as completed_views
也不正确,所以我不确定该怎么做。
您需要在子查询中使用以上查询。
subquery = Video.joins(:activities)
.where('occurred_at >= ? AND occurred_at <= ?', @start_time, @end_time)
.select('videos.*, COUNT(activities.id) as total_views, COUNT(activities.progress >= 90) as completed_views')
.group('videos.id').as('videos')
Video
.select('videos.*, case when total_views = 0 then 0.0 else ROUND( 100.0 *(completion_views/ cast(total_views as float)) ) end as percent_completed')
.from(subquery).page(@page).per(@per_page)
(我只是使用您在上面提供的伪代码,但是总体思路是可靠的。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.