一个变量的两个值都存在的SQL

一个变量的两个值都存在的SQL,sql,select,Sql,Select,假设我有一个全球票房信息表,包括“电影名称”、“国家”和“收入”列。问题是如何找出A国比B国更畅销的电影。以下是我的答案: SELECT filmName FROM Boxoffice WHERE (SELECT earnings FROM Boxoffice WHERE country = "A") > (SELECT earnings FROM Boxoffice WHERE country = "B") GROUP BY filmNam

假设我有一个全球票房信息表,包括“电影名称”、“国家”和“收入”列。问题是如何找出A国比B国更畅销的电影。以下是我的答案:

SELECT filmName 
FROM Boxoffice 
WHERE (SELECT earnings FROM Boxoffice WHERE country = "A") > 
(SELECT earnings FROM Boxoffice WHERE country = "B") 
GROUP BY filmName

但后来我发现有些电影并没有在这两个国家上映。我不知道如何在我现有的答案的基础上,在两国上映的电影中加入这个条件。我也不知道我的答案是否有任何问题,因为我没有真实的数据。

我认为自连接会更简单:

选择一个名称
从票房a
在a.country='a'和b.country='b'和a.earnings>b.earnings上加入票房b;

似乎
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;

您使用的是什么数据库管理系统?您应该始终使用有问题的DBMS标记SQL请求。有时甚至有必要了解版本。顺便说一下,字符串文字应该包含在单引号中。查询的主要问题是子查询不相关,即它们不查找主查询的胶片。(主查询中的
GROUP BY
看起来很奇怪,因为您没有应用任何聚合函数。在这种情况下,我们宁愿使用
选择DISTINCT
。如果有单独的胶片表,数据库会更好。)至于“因为我没有真实的数据”:设置一些测试数据并尝试它很容易。为此,我使用dbfiddle.uk。如果你下次这样做,那就太好了。它将帮助您检查您自己的查询,并帮助我们检查我们的查询。以下是您的查询数据: