假设我有一个全球票房信息表,其中包括列"filmName"国家;以及";收益";。问题是如何找出在A国比在B国卖得更好的电影。以下是我的答案:
SELECT filmName
FROM Boxoffice
WHERE (SELECT earnings FROM Boxoffice WHERE country = "A") >
(SELECT earnings FROM Boxoffice WHERE country = "B")
GROUP BY filmName
但后来我发现有些电影并没有在这两个国家上映。我想知道如何在我现有的答案中加入在两国上映的电影的条件。我也不知道我的答案是否有任何问题,因为我没有真正的数据。
我认为自联接会更简单:
SELECT a.filmname
FROM boxoffice a
JOIN boxoffice b ON a.country = 'A' AND b.country = 'B' AND a.earnings > b.earnings;
似乎filmname
和country
是表的唯一键,即每个电影和国家有一行。
获得在A国比B国卖得更好的电影的一种方法是汇总和比较HAVING
条款中的收益:
select filmname
from boxoffice
group by filmname
having max(case when country = 'A' then earnings end) >
max(case when country = 'B' then earnings end)
order by filmname;
另一种方式是加入,例如:
select a.filmname
from (select * from boxoffice where country = 'A') a
join (select * from boxoffice where country = 'B') b
on a.filmname = b.filmname and a.earnings > b.earnings
order by a.filmname;