[英]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.