SQL WHERE变量的两个值都存在



假设我有一个全球票房信息表,其中包括列"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;

似乎filmnamecountry是表的唯一键,即每个电影和国家有一行。

获得在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;

最新更新