繁体   English   中英

SQL Server:select语句中的错误

[英]SQL Server : error in a select statement

我创建了一个包含有关电影和演员等信息的数据库。其中,我创建了这些表:

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)))

当我执行此操作时,我收到此错误:

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

我知道在使用maxcount函数时出现了错误,但我无法理解错误。 你能帮我么?

MAX(distinct COUNT) 这是一个奇怪的结构。 聚合函数不嵌套。

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

  1. 总是使用显式join语法。 切勿在from子句中使用逗号。
  2. 使用表别名(缩写)使查询更具可读性。
  3. 将它们用于所有列引用。

这是您想要的查询。 它按演员聚集,按电影数量排序,并选择最高值:

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 WITH TIES选项(如Hamlet评论中所建议的)。 否则,您使用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 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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM