Sql server SQL Server查询与分组依据有关的问题

Sql server SQL Server查询与分组依据有关的问题,sql-server,Sql Server,我必须就以下陈述写一个疑问: 列出导演50部或以上电影的所有导演,按导演电影数量的降序排列。返回导演的姓名以及他们各自导演的电影数量 我写了多个变体,但不断出错 它涉及连接。所涉及的表格包括: 董事(董事ID、姓氏、姓氏) 电影导演(导演ID、电影ID) 到目前为止,我尝试的是: SELECT DISTINCT firstname, lastname, COUNT(movie_directors.directorID) FROM dbo.movie_directo

我必须就以下陈述写一个疑问:

列出导演50部或以上电影的所有导演,按导演电影数量的降序排列。返回导演的姓名以及他们各自导演的电影数量

我写了多个变体,但不断出错

它涉及连接。所涉及的表格包括:

  • 董事
    (董事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不同*