Sql server SQL Server查询与分组依据有关的问题
我必须就以下陈述写一个疑问: 列出导演50部或以上电影的所有导演,按导演电影数量的降序排列。返回导演的姓名以及他们各自导演的电影数量 我写了多个变体,但不断出错 它涉及连接。所涉及的表格包括:Sql server SQL Server查询与分组依据有关的问题,sql-server,Sql Server,我必须就以下陈述写一个疑问: 列出导演50部或以上电影的所有导演,按导演电影数量的降序排列。返回导演的姓名以及他们各自导演的电影数量 我写了多个变体,但不断出错 它涉及连接。所涉及的表格包括: 董事(董事ID、姓氏、姓氏) 电影导演(导演ID、电影ID) 到目前为止,我尝试的是: SELECT DISTINCT firstname, lastname, COUNT(movie_directors.directorID) FROM dbo.movie_directo
(董事ID、姓氏、姓氏)董事
(导演ID、电影ID)李>电影导演
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
这是否正确?每当使用
GROUP BY
时,不在聚合函数中的任何列都必须位于GROUP BY
子句中
理由是:groupby
by通过groupby中每一列的唯一值集粉碎记录,因此任何不在groupby
或中具有
子句的列都不属于groupby的用途
因此,通过对列强制使用聚合函数,我们可以保证select语句在其结果中是有目的的……这应该是您编写代码的方式
另外,COUNT()
无论如何都会忽略NULL
值,并且您的ON
谓词将仅返回控制器ID上两个表之间的匹配。内部联接
不会返回NULL结果
因此,在select语句中使用COUNT()
。
最后,您的HAVING
子句是另一个谓词,只能与groupby
一起使用。
Um,错误消息告诉您,该列不在group by子句中。基本上,因为你没有。如果没有GROUPBY,您就不能使用having子句。是按照标题使用
MS SQL
,还是按照标记使用MySQL
?它们是完全不同的系统,有时有明显不同的语法。顺便说一句,欢迎使用堆栈溢出。在标题中添加“非常重要”这样的文字不会引起你额外的注意,因为每个人的问题对他们都很重要。但这会让一些人感到不快,你会看到很少有人看你的问题,特别是当问题相当琐碎和简单的时候。提示:groupby
@ceejayoz这是mssqlnote你可以在select语句中使用COUNT(*)
,但我希望避免在COUNT(*)时出现混淆是TSQL中的行集计数器,与SELECT不同*