一个变量的两个值都存在的SQL
假设我有一个全球票房信息表,包括“电影名称”、“国家”和“收入”列。问题是如何找出A国比B国更畅销的电影。以下是我的答案:一个变量的两个值都存在的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
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。如果你下次这样做,那就太好了。它将帮助您检查您自己的查询,并帮助我们检查我们的查询。以下是您的查询数据: