shapoval

video-trending-score

Jul 7th, 2022 (edited)
348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 7.09 KB | None | 0 0
  1. SELECT
  2.     views_scores.video_id,
  3.     recency_scores.publish_at, recency_scores.normalized_score as `recency-normalized_score`,
  4.     views_scores.`0-1d` as `views-0-1d`, views_scores.`1-2d` as `views-1-2d`, views_scores.`2-3d` as `views-2-3d`, views_scores.`3-4d` as `views-3-4d`, views_scores.`4-5d` as `views-4-5d`,
  5.     views_scores.`5-6d` as `views-5-6d`, views_scores.`6-7d` as `views-6-7d`, views_scores.`7-8d` as `views-7-8d`, views_scores.`8-9d` as `views-8-9d`, views_scores.`9-10d` as `views-9-10d`,
  6.     views_scores.`total_score` as `views-total_score`, views_scores.normalized_score as `views-normalized_score`,
  7.     comments_scores.`0-1d` as `comments-0-1d`, comments_scores.`1-2d` as `comments-1-2d`, comments_scores.`2-3d` as `comments-2-3d`, comments_scores.`3-4d` as `comments-3-4d`, comments_scores.`4-5d` as `comments-4-5d`,
  8.     comments_scores.`5-6d` as `comments-5-6d`, comments_scores.`6-7d` as `comments-6-7d`, comments_scores.`7-8d` as `comments-7-8d`, comments_scores.`8-9d` as `comments-8-9d`, comments_scores.`9-10d` as `comments-9-10d`,
  9.     comments_scores.`total_score` as `comments-total_score`, comments_scores.normalized_score as `comments-normalized_score`,
  10.     likes_scores.`0-1d` as `likes-0-1d`, likes_scores.`1-2d` as `likes-1-2d`, likes_scores.`2-3d` as `likes-2-3d`, likes_scores.`3-4d` as `likes-3-4d`, likes_scores.`4-5d` as `likes-4-5d`,
  11.     likes_scores.`5-6d` as `likes-5-6d`, likes_scores.`6-7d` as `likes-6-7d`, likes_scores.`7-8d` as `likes-7-8d`, likes_scores.`8-9d` as `likes-8-9d`, likes_scores.`9-10d` as `likes-9-10d`,
  12.     likes_scores.`total_score` as `likes-total_score`, likes_scores.normalized_score as `likes-normalized_score`,
  13.     recency_scores.normalized_score * 4 as `recency-score`, views_scores.normalized_score * 3 as `views-score`, comments_scores.normalized_score * 2 as `comments-score`, likes_scores.normalized_score as `likes-score`,
  14.     IFNULL(recency_scores.normalized_score, 0) * 4 + IFNULL(views_scores.normalized_score, 0) * 3 + IFNULL(comments_scores.normalized_score, 0) * 2 + IFNULL(likes_scores.normalized_score, 0)as `video_trending_score`
  15. FROM (
  16. SELECT tmp2.*, ROUND(tmp2.total_score / 268344 * 100) as `normalized_score`
  17. FROM (
  18.   SELECT
  19.     tmp1.*,
  20.     tmp1.`0-1d` * 10 + tmp1.`1-2d` * 9 + tmp1.`2-3d` * 8 + tmp1.`3-4d` * 7 + tmp1.`4-5d` * 6 +
  21.      tmp1.`5-6d` * 5 + tmp1.`6-7d` * 4 + tmp1.`7-8d` * 3 + tmp1.`8-9d` * 2 + tmp1.`9-10d` * 1 as `total_score`
  22.   FROM (
  23.     SELECT
  24.       vw.video_id,
  25.       SUM(IF(vw.created_at >= NOW() - INTERVAL 1 day, 1, 0)) AS `0-1d`,
  26.       SUM(IF(vw.created_at BETWEEN NOW() - INTERVAL 2 day AND NOW() - INTERVAL 1 day, 1, 0)) AS `1-2d`,
  27.       SUM(IF(vw.created_at BETWEEN NOW() - INTERVAL 3 day AND NOW() - INTERVAL 2 day, 1, 0)) AS `2-3d`,
  28.       SUM(IF(vw.created_at BETWEEN NOW() - INTERVAL 4 day AND NOW() - INTERVAL 3 day, 1, 0)) AS `3-4d`,
  29.       SUM(IF(vw.created_at BETWEEN NOW() - INTERVAL 5 day AND NOW() - INTERVAL 4 day, 1, 0)) AS `4-5d`,
  30.       SUM(IF(vw.created_at BETWEEN NOW() - INTERVAL 6 day AND NOW() - INTERVAL 5 day, 1, 0)) AS `5-6d`,
  31.       SUM(IF(vw.created_at BETWEEN NOW() - INTERVAL 7 day AND NOW() - INTERVAL 6 day, 1, 0)) AS `6-7d`,
  32.       SUM(IF(vw.created_at BETWEEN NOW() - INTERVAL 8 day AND NOW() - INTERVAL 7 day, 1, 0)) AS `7-8d`,
  33.       SUM(IF(vw.created_at BETWEEN NOW() - INTERVAL 9 day AND NOW() - INTERVAL 8 day, 1, 0)) AS `8-9d`,
  34.       SUM(IF(vw.created_at BETWEEN NOW() - INTERVAL 10 day AND NOW() - INTERVAL 9 day, 1, 0)) AS `9-10d`
  35.     FROM `lustery_video_view` as vw
  36.     GROUP BY vw.video_id
  37.   ) as tmp1
  38. ) as tmp2
  39. ) as views_scores
  40. LEFT JOIN (
  41.   SELECT
  42.     lv.id AS `video_id`,
  43.     lv.publish_at,
  44.     (
  45.       SELECT (11 - COUNT(*)) * 10 FROM `lustery_video` lv_tmp
  46.       WHERE lv_tmp.publish_at <= NOW() AND lv_tmp.publish_at >= lv.publish_at
  47.     ) as normalized_score
  48.   FROM `lustery_video` lv
  49.   WHERE lv.publish_at <= NOW()
  50.   ORDER BY lv.publish_at DESC
  51.   LIMIT 10
  52. ) as recency_scores ON views_scores.video_id = recency_scores.video_id
  53. LEFT JOIN (
  54.   SELECT tmp2.*, ROUND(tmp2.total_score / 40 * 100) as `normalized_score`
  55.   FROM (
  56.     SELECT
  57.       tmp1.*,
  58.       tmp1.`0-1d` * 10 + tmp1.`1-2d` * 9 + tmp1.`2-3d` * 8 + tmp1.`3-4d` * 7 + tmp1.`4-5d` * 6 +
  59.        tmp1.`5-6d` * 5 + tmp1.`6-7d` * 4 + tmp1.`7-8d` * 3 + tmp1.`8-9d` * 2 + tmp1.`9-10d` * 1 as `total_score`
  60.     FROM (
  61.       SELECT
  62.         vc.video_id,
  63.         SUM(IF(vc.created_at >= NOW() - INTERVAL 1 day, 1, 0)) AS `0-1d`,
  64.         SUM(IF(vc.created_at BETWEEN NOW() - INTERVAL 2 day AND NOW() - INTERVAL 1 day, 1, 0)) AS `1-2d`,
  65.         SUM(IF(vc.created_at BETWEEN NOW() - INTERVAL 3 day AND NOW() - INTERVAL 2 day, 1, 0)) AS `2-3d`,
  66.         SUM(IF(vc.created_at BETWEEN NOW() - INTERVAL 4 day AND NOW() - INTERVAL 3 day, 1, 0)) AS `3-4d`,
  67.         SUM(IF(vc.created_at BETWEEN NOW() - INTERVAL 5 day AND NOW() - INTERVAL 4 day, 1, 0)) AS `4-5d`,
  68.         SUM(IF(vc.created_at BETWEEN NOW() - INTERVAL 6 day AND NOW() - INTERVAL 5 day, 1, 0)) AS `5-6d`,
  69.         SUM(IF(vc.created_at BETWEEN NOW() - INTERVAL 7 day AND NOW() - INTERVAL 6 day, 1, 0)) AS `6-7d`,
  70.         SUM(IF(vc.created_at BETWEEN NOW() - INTERVAL 8 day AND NOW() - INTERVAL 7 day, 1, 0)) AS `7-8d`,
  71.         SUM(IF(vc.created_at BETWEEN NOW() - INTERVAL 9 day AND NOW() - INTERVAL 8 day, 1, 0)) AS `8-9d`,
  72.         SUM(IF(vc.created_at BETWEEN NOW() - INTERVAL 10 day AND NOW() - INTERVAL 9 day, 1, 0)) AS `9-10d`
  73.       FROM `lustery_video_comment` as vc
  74.       GROUP BY vc.video_id
  75.     ) as tmp1
  76.   ) as tmp2
  77. ) as comments_scores ON views_scores.video_id = comments_scores.video_id
  78. LEFT JOIN (
  79.   SELECT tmp2.*, ROUND(tmp2.total_score / 853 * 100) as `normalized_score`
  80.   FROM (
  81.     SELECT
  82.       tmp1.*,
  83.       tmp1.`0-1d` * 10 + tmp1.`1-2d` * 9 + tmp1.`2-3d` * 8 + tmp1.`3-4d` * 7 + tmp1.`4-5d` * 6 +
  84.        tmp1.`5-6d` * 5 + tmp1.`6-7d` * 4 + tmp1.`7-8d` * 3 + tmp1.`8-9d` * 2 + tmp1.`9-10d` * 1 as `total_score`
  85.     FROM (
  86.       SELECT
  87.         vl.video_id,
  88.         SUM(IF(vl.created_at >= NOW() - INTERVAL 1 day, 1, 0)) AS `0-1d`,
  89.         SUM(IF(vl.created_at BETWEEN NOW() - INTERVAL 2 day AND NOW() - INTERVAL 1 day, 1, 0)) AS `1-2d`,
  90.         SUM(IF(vl.created_at BETWEEN NOW() - INTERVAL 3 day AND NOW() - INTERVAL 2 day, 1, 0)) AS `2-3d`,
  91.         SUM(IF(vl.created_at BETWEEN NOW() - INTERVAL 4 day AND NOW() - INTERVAL 3 day, 1, 0)) AS `3-4d`,
  92.         SUM(IF(vl.created_at BETWEEN NOW() - INTERVAL 5 day AND NOW() - INTERVAL 4 day, 1, 0)) AS `4-5d`,
  93.         SUM(IF(vl.created_at BETWEEN NOW() - INTERVAL 6 day AND NOW() - INTERVAL 5 day, 1, 0)) AS `5-6d`,
  94.         SUM(IF(vl.created_at BETWEEN NOW() - INTERVAL 7 day AND NOW() - INTERVAL 6 day, 1, 0)) AS `6-7d`,
  95.         SUM(IF(vl.created_at BETWEEN NOW() - INTERVAL 8 day AND NOW() - INTERVAL 7 day, 1, 0)) AS `7-8d`,
  96.         SUM(IF(vl.created_at BETWEEN NOW() - INTERVAL 9 day AND NOW() - INTERVAL 8 day, 1, 0)) AS `8-9d`,
  97.         SUM(IF(vl.created_at BETWEEN NOW() - INTERVAL 10 day AND NOW() - INTERVAL 9 day, 1, 0)) AS `9-10d`
  98.       FROM `lustery_video_like` as vl
  99.       GROUP BY vl.video_id
  100.     ) as tmp1
  101.   ) as tmp2
  102. ) as likes_scores ON views_scores.video_id = likes_scores.video_id
  103. ORDER BY video_trending_score DESC;
Add Comment
Please, Sign In to add comment