最終範例

以資料驅動的 SQL 決策制定

Tim Verdonck

Professor Statistics and Data Science

商業情境

  • MovieNow 正考慮投資新電影。
  • 將近年出品的電影上架,對 MovieNow 來說比舊片成本更高。
  • 資料分析第一步:
    • 近年出品的電影,顧客評分是否高於舊片?
    • 各國之間是否有差異?
以資料驅動的 SQL 決策制定

1. 合併資料

  • 需要的資訊:
    • renting 含租借與評分的紀錄
    • customers 顧客的國家
    • movies 電影的發行年份
      SELECT *
      FROM renting AS r
      LEFT JOIN customers AS c
      ON c.customer_id = r.customer_id
      LEFT JOIN movies AS m
      ON m.movie_id = r.movie_id;
      
以資料驅動的 SQL 決策制定

2. 篩選相關紀錄

  • 僅使用至少有 4 筆評分的電影紀錄
  • 僅使用 2018-04-01 之後的租借紀錄
SELECT *
FROM renting AS r
LEFT JOIN customers AS c
ON c.customer_id = r.customer_id
LEFT JOIN movies AS m
ON m.movie_id = r.movie_id
WHERE r.movie_id IN (
    SELECT movie_id
    FROM renting
    GROUP BY movie_id
    HAVING COUNT(rating) >= 4)
AND r.date_renting >= '2018-04-01';
以資料驅動的 SQL 決策制定

3. 彙總

彙總類型:

  • 計算租借次數
  • 計算不同電影數
  • 計算平均評分

彙總層級:

  • 總彙總
  • 依發行年份彙總
  • 依發行年份並分國家彙總
以資料驅動的 SQL 決策制定

3. 彙總

SELECT c.country,
       m.year_of_release,
       COUNT(*) AS n_rentals,
       COUNT(DISTINCT r.movie_id) AS n_movies,
       AVG(rating) AS avg_rating
FROM renting AS r
LEFT JOIN customers AS c
ON c.customer_id = r.customer_id
LEFT JOIN movies AS m
ON m.movie_id = r.movie_id
WHERE r.movie_id IN (
    SELECT movie_id
    FROM renting
    GROUP BY movie_id
    HAVING COUNT(rating) >= 4)
AND r.date_renting >= '2018-04-01'
GROUP BY ROLLUP (m.year_of_release, c.country)
ORDER BY c.country, m.year_of_release;
以資料驅動的 SQL 決策制定

結果資料表

| year_of_release | country | n_rentals | n_movies | avg_rating         |
|-----------------|---------|-----------|----------|--------------------|
| 2009            | null    | 10        | 1        | 8.7500000000000000 | 
| 2010            | null    | 41        | 5        | 7.9629629629629630 | 
| 2011            | null    | 14        | 2        | 8.2222222222222222 | 
| 2012            | null    | 28        | 5        | 8.1111111111111111 | 
| 2013            | null    | 10        | 2        | 7.6000000000000000 | 
| 2014            | null    | 5         | 1        | 8.0000000000000000 | 
| null            | null    | 333       | 50       | 7.9024390243902439 |
以資料驅動的 SQL 決策制定

一起來練習吧!

以資料驅動的 SQL 決策制定

Preparing Video For Download...