[英]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)))
当我执行此操作时,我收到此错误:
无法对包含聚合或子查询的表达式执行聚合函数。
我知道在使用max
和count
函数时出现了错误,但我无法理解错误。 你能帮我么?
MAX(distinct COUNT)
。 。 。 这是一个奇怪的结构。 聚合函数不嵌套。
您显然正在学习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
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.