2015-06-18 35 views
1

我目前完成More JOIN operations教程sqlzoo的和遇到下面的代碼爲答案#12最有效的方法:寫HAVING條件

SELECT yr,COUNT(title) 
FROM movie 
JOIN casting 
JOIN actor 
ON actorid=actor.id AND movie.id=movieid 
WHERE name='John Travolta' 
GROUP BY yr 

HAVING COUNT(title)= 
(SELECT MAX(c) FROM 
(SELECT yr, COUNT(title) AS c 
FROM movie 
JOIN casting ON movie.id=movieid 
JOIN actor ON actorid=actor.id 
WHERE name='John Travolta' 
GROUP BY yr) AS t 
) 

有沒有表達這種代碼更簡潔的方式?

+0

「在任何一年製作2部以上的電影。」so'HAVING COUNT(title)> 2' –

回答

2

是的。如果我正確理解問題,那就更簡單了。

SELECT yr,COUNT(title) 
    FROM movie JOIN casting ON movie.id=movieid 
     JOIN 
     actor ON actorid=actor.id 
WHERE name='John Travolta' 
GROUP BY yr 
HAVING COUNT(title) > 2 
1

它看起來像原始網站的建議答案不符合他們問的問題。

最好的答案,他們問:

SELECT yr,COUNT(title) FROM 
    movie JOIN casting ON movie.id=movieid 
     JOIN actor ON actorid=actor.id 
WHERE name='John Travolta' 
GROUP BY yr 
HAVING COUNT(title)>2 

他們的回答是:

SELECT yr,COUNT(title) FROM 
movie JOIN casting ON movie.id=movieid 
JOIN actor ON actorid=actor.id 
WHERE name='John Travolta' 
GROUP BY yr 
HAVING COUNT(title)= 
(SELECT MAX(c) FROM (SELECT yr,COUNT(title) AS c 
FROM movie 
JOIN casting ON movie.id=movieid JOIN actor ON actorid=actor.id 
WHERE name='John Travolta' 
GROUP BY yr) AS t 

但是這實際上回答了另一個問題,那就是:「對於今年他拍了多少部電影,那一年是多少,他製作了多少部電影?「