簡體   English   中英

使用Postgres變量用法的Rails查詢

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM