[英]SQL window function and joins
我的查詢如下:
SELECT
category_name, film_title, rental_count
FROM
(SELECT
c.name AS category_name, f.title AS film_title,
COUNT(r.rental_date) OVER (PARTITION BY f.title) AS rental_count
FROM
category c
JOIN
film_category fc ON fc.category_id = c.category_id
JOIN
film f ON fc.film_id = f.film_id
JOIN
inventory i ON i.film_id = f.film_id
JOIN
rental r ON i.inventory_id = r.inventory_id) t1
WHERE
category_name IN ('Animation', 'Children', 'Classics', 'Comedy', 'Family', 'Music')
ORDER BY
1, 2
結果如下:
如您所見,電影的標題重復了,正如您已經知道的那樣,它不應該重復。 但是,我不明白為什么會這樣?
答案其實應該如上圖。
非常感謝任何幫助。
為什么會這樣? 這就是 window 函數的作用。 它們不會減少行數。 在現有行上添加新列(通常是從多行收集的數據)。
您只需要一個聚合:
SELECT c.name AS category_name, f.title AS film_title,
COUNT(r.rental_date) as rental_count
FROM category c JOIN
film_category fc
ON fc.category_id = c.category_id JOIN
film f
ON fc.film_id = f.film_id JOIN
inventory i
ON i.film_id = f.film_id JOIN
rental r
ON i.inventory_id = r.inventory_id
WHERE c.category_name IN ('Animation', 'Children', 'Classics', 'Comedy', 'Family', 'Music')
GROUP BY 1, 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.