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