考虑到以下关系movie {country,major_genre,production_year, run_time, title
,我想列出除西班牙以外的所有国家/地区,在该国家制作的电影,前提是其中至少有两部。
我写了两个查询,他们以某种方式产生了不同的结果。似乎第一个是正确的,但在我看来它们是平等的。我正在学习SQL。有人可以帮忙解释一下这些差异吗?谢谢你的帮助!
第一个:
SELECT m1.country, m1.production_year, m1.title
FROM movie m1
WHERE m1.country <> "Spain"
AND m1.country
IN (
SELECT m2.country
FROM movie m2
GROUP BY m2.country //select only the ones with at least 2 movies
HAVING COUNT( * ) >=2
)
ORDER BY m1.country ASC , m1.production_year DESC
第二个:
SELECT m1.country, m1.production_year, m1.title
FROM movie m1
WHERE m1.country <> "Spain"
GROUP BY m1.country
HAVING COUNT( * ) >=2 //the country selected should have count of at least 2 rows
ORDER BY m1.country ASC , m1.production_year DESC
答案 0 :(得分:1)
问题是第二个查询在单个列上使用GROUP BY
,但返回3列。所以每个国家都有&gt;一部电影出现一次,随机播放#34;年份和电影的价值(实际上可能不是随机的)。
您也可以在没有GROUP BY
的情况下执行此操作:
SELECT m1.country, m1.production_year, m1.title
FROM movie m1
WHERE m1.country <> "Spain"
AND 1 < (
SELECT count(*)
FROM movie m2
WHERE m2.country = m1.country
)
ORDER BY m1.country ASC , m1.production_year DESC
这是一个小提琴:http://sqlfiddle.com/#!9/e2ddc/2