【问题标题】:Most Efficient way to write HAVING condition编写 HAVING 条件的最有效方法
【发布时间】:2015-06-18 18:35:10
【问题描述】:

我目前正在完成sqlzoo的More JOIN operations教程,遇到以下代码作为#12的答案:

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
)

没有更简洁的方式来表达这段代码吗?

【问题讨论】:

  • “对于他制作超过 2 部电影的任何年份。” 所以HAVING COUNT(title)>2

标签: mysql sql


【解决方案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 

【讨论】:

    【解决方案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
    

    他们的回答是:

    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
    

    )

    但这实际上回答了一个不同的问题,即:“在他制作电影最多的那一年,那是哪一年,他制作了多少部电影?”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 2013-05-31
      相关资源
      最近更新 更多