2017-05-30 64 views
-6

我已经在stackoverflow上搜索,这个问题没有被问到。如何做MySQL查询加入?

问:

这当中最繁忙的年,“约翰·特拉沃尔塔”,显示年,他每年做任何一年中,他取得了超过2部电影电影的数量。

  • 电影(ID,标题,年,评分,投票,导演)
  • 演员(ID,姓名)
  • 铸造(movieid,actorId来,ORD)

查询

SELECT y.yr,MAX(y.count) 

FROM(
SELECT movie.yr,COUNT(movie.yr) AS count 

FROM (movie JOIN casting ON (movie.id=movieid)) JOIN actor ON (actor.id=actorid) 

WHERE name='John Travolta' 

GROUP BY yr 
ORDER BY COUNT(movie.yr) DESC) y 
GROUP BY yr 

结果显示MAX(y.count)范围从1到3的许多行,但接受的答案只显示1行,最大值为3.我如何纠正上述代码限制为仅一个最繁忙的一年,保持上述代码基本完好?

给出解决方案:

SELECT年,COUNT(标题)FROM

电影JOIN铸就movie.id = movieid

 JOIN actor ON actorid=actor.id 

其中name = '约翰屈伏塔'

GROUP BY年

HAVING COUNT(标题)=(SELECT MAX(c)由

(SELECT年,COUNT(标题)AS C来自

电影JOIN铸造ON movie.id = movieid

 JOIN actor ON actorid=actor.id 

其中名称= '约翰屈伏塔'

GROUP BY年)为T )

最后的话:我希望人们ST如果不仔细阅读问题,请标记为重复,请不要像提问者懒惰一样行事。我一直在阅读6 - 7年前的主题,肯定会在答案的文明程度和成熟度方面急剧下降。我不敢相信曾经有很多人慷慨地花时间向他们不认识的新手解释,而不是撕裂别人。

+0

你有没有试过看msql手册? – ThisGuyHasTwoThumbs

+0

请参阅https://meta.stackoverflow。com/questions/333952/why-should-i-provide-an-mcve-for-what-seem-to-be-a-very-simple-sql-query – Strawberry

+0

Simple 3 table join,count,where ,按组排序,并且我看到不需要子查询。 – xQbert

回答

1

类似这样的事情吗?

select t2.yr, count(*) as NbMovies 
from movie t1 
inner join casting t2 on t1.id=t2.movieid 
inner join actor t3 on t3.id=t2.actorid 
where t3.name='John Travolta' 
group by t2.yr 
having count(*)>2 
order by NbMovies desc 
+0

确实不应该使用col数字,而是使用您创建的别名。更新选择无序调整以排序可能会导致倾斜结果。最好不要早早教坏习惯。 – xQbert

+0

一切都很好教,但我同意;)) – Esperento57

+0

我试过这个查询,但它说'未知列't'字段'在'字段列表' –