我必须写一个关于以下声明的查询:
列出所有指导50部或以上电影的导演,按照他们导演的电影数量的降序排列。退还董事'名称和每部电影的导演数量。
我写了多个版本,但我一直在收到错误。
它涉及连接。涉及的表格是:
Directors
(directorID,名字,姓氏),Movie_Directors
(directorID,movieID)。 到目前为止我尝试的是:
SELECT DISTINCT
firstname, lastname,
COUNT(movie_directors.directorID)
FROM
dbo.movie_directors
INNER JOIN
directors ON directors.directorID = movie_directors.directorID
GROUP BY
firstname, lastname
HAVING
COUNT(movie_directors.directorID) >= 50
这是对的吗?
答案 0 :(得分:0)
每当您使用GROUP BY
时,任何不在聚合函数中的列都必须位于GROUP BY
子句MSDN - Group By (Transact SQL)中。
原因是:GROUP
通过按组中每列的唯一值集打碎记录,因此任何不在GROUP BY
或HAVING
子句中的列都会超出了小组的目的。
因此,通过强制列的聚合函数,我们保证select语句在其结果中是有目的的...这应该是你编码的方式。
此外,COUNT()
无论如何都会忽略NULL
值,而ON
谓词只会返回director_ID上两个表之间的匹配。 INNER JOIN
不会返回null结果。
因此,请在select语句中使用COUNT(<group by colum>)
。
最后,您的HAVING
子句是另一个谓词,只能与GROUP BY
一起使用。
MSDN - HAVING (Transact-SQL)