我正在尝试在示例DVD Rental PostgreSQL数据库上运行此代码。但是,每当我运行此查询时,都会出现错误:无法执行空查询。我不明白为什么。
SELECT f.title, SUM(p.amount) AS revenue, a.last_name;
FROM payment p film f actor a
WHERE
(SELECT
f.title, a.actor_id, SUM(p.amount) AS revenue
FROM payment p
JOIN rental r ON p.rental_id = r.rental_id
JOIN inventory i ON i.inventory_id = r.inventory_id
JOIN film f ON i.film_id = f.film_id
JOIN film_actor fa ON fa.film_id = f.film_id
JOIN actor a ON fa.actor_id = a.actor_id
GROUP BY
f.title, a.actor_id
ORDER BY
revenue DESC)
从评论:
我的目标是检索十大最卖座电影中的演员姓名。
首先,请考虑以下查询,该查询按电影的总付款额对其进行排名。为此,我们联接表inventory
,rental
和payment
。
select
i.film_id,
sum(p.amount) total_amount
rank() over(partition by i.film_id order by sum(p.amount) desc) rn
from inventory i
inner join rental r on r.inventory_id = i.inventory_id
inner join payment p on p.rental_id = r.rental_id
group by i.film_id
[C0列代表每部电影的等级,按总数降序排列(数量最大的电影排在最前面)。
然后,我们可以为前10部电影加入此结果集的筛选器,并合并表rn
和film_actor
以带出出现在这些电影中的演员;为避免演员在前十部电影中的一部以上出演,结果集中没有重复,我们使用actor
:
seect distinct