SQL Server:select语句中出现错误

SQL Server:select语句中出现错误,sql,sql-server,database,Sql,Sql Server,Database,我创建了一个包含电影和演员等信息的数据库。除此之外,我还创建了以下表格: CREATE TABLE Movie ( Movie_ID PRIMARY KEY NOT NULL idenity(1,1), Movie_title varchar(50), .... ) CREATE TABLE Actor ( Actor_ID PRIMARY KEY NOT NULL identity(1,1), Actor_Name varchar(50), Actor_S

我创建了一个包含电影和演员等信息的数据库。除此之外,我还创建了以下表格:

CREATE TABLE Movie
(
   Movie_ID PRIMARY KEY NOT NULL idenity(1,1),
   Movie_title varchar(50),
   ....
)

CREATE TABLE Actor
(
   Actor_ID PRIMARY KEY NOT NULL identity(1,1),
   Actor_Name varchar(50),
   Actor_Surname varchar(50),
   .....    
)
我使用下表将它们链接起来:

CREATE TABLE Has_Actor
(
    Has_Actor_ID PRIMARY KEY NOT NULL identity(1,1),
    Has_Actor_M_ID foreign key references Movie(Movie_ID),
    Has_Actor_A_ID foreign key references Actor(Actor_ID),
)
现在我想查看演员在大多数电影中扮演的角色的姓名,所以我尝试了以下选择语句:

SELECT 
    Actor.Actor_Name, Actor.Actor_Surname
FROM 
    Actor, Has_Actor
WHERE 
    Has_Actor_A_ID = Actor.Actor_ID 
    AND Actor.Actor_ID = (SELECT MAX(distinct COUNT(Has_Actor.Actor_ID)))
当我执行此操作时,我得到以下错误:

无法对包含聚合或子查询的表达式执行聚合函数

我知道在使用
max
count
函数时出现了一个错误,但我不知道哪里出了问题。你能帮帮我吗?

试试这个

SELECT Actor.Actor_Name, Actor.Actor_Surname
FROM Actor, 
    (
    SELECT TOP 1 Actor_ID,COUNT(Actor_ID) as counting from Has_Actor
    Group by Actor_ID order by COUNT(Actor_ID) DESC
    )
 Has_Actor
WHERE Has_Actor_A_ID=Actor.Actor_ID 
MAX(不同计数)
。这是一个奇怪的结构。聚合函数不嵌套

您显然正在学习SQL,因此我已修复了您的查询,因此您可以学习执行以下操作:

  • 始终使用显式
    join
    语法。切勿在
    from
    子句中使用逗号
  • 使用表别名(缩写)使查询更具可读性
  • 将它们用于所有列引用
  • 这是您想要的查询。它按演员汇总,按电影数量排序,并选择最高值:

    SELECT TOP 1 a.Actor_Name, a.Actor_Surname
    FROM Actor a join
         Has_Actor ha
         on ha.Has_Actor_A_ID = a.Actor_ID
    GROUP BY a.Actor_Name, a.Actor_Surname
    ORDER BY COUNT(*) desc
    
    编辑:

    如果您想要所有演员(在问题中模棱两可),那么您可以使用带领带的
    选项
    TOP
    (如哈姆雷特评论中所建议的)。否则,使用CTE表示查询:

    WITH ActorCounts as (
          SELECT a.Actor_Name, a.Actor_Surname, COUNT(*) as NumMovies
          FROM Actor a join
               Has_Actor ha
               on ha.Has_Actor_A_ID = a.Actor_ID
          GROUP BY a.Actor_Name, a.Actor_Surname
         )
    SELECT Actor_Name, Actor_Surname
    FROM ActorCounts ac
    WHERE NumMovies = (SELECT MAX(NumMovies) FROM ActorCounts);
    

    -在这个子查询中,您没有提到表名SELECT MAX(distinct COUNT(Has_Actor.Actor_ID))
    TOP 1和TIES
    是相当不错的,出现以下错误:在select top 1和group by语句中:无法绑定多部分标识符“Actor_ID”。在两个计数函数中:where语句中的列名“Actor\u ID”无效:无效列名具有\u Actor\u ID