sql:按加入和分组
有三张桌子: 电影(身份证、片名、年份、配乐、投票、, 导演)演员(身份证、姓名) 演员阵容(电影ID、actorid、ord) 问:你最忙的几年是什么 “约翰·特拉沃尔塔”。显示 他每年都拍电影 答:我的尝试在语法上是可行的。为什么?sql:按加入和分组,sql,Sql,有三张桌子: 电影(身份证、片名、年份、配乐、投票、, 导演)演员(身份证、姓名) 演员阵容(电影ID、actorid、ord) 问:你最忙的几年是什么 “约翰·特拉沃尔塔”。显示 他每年都拍电影 答:我的尝试在语法上是可行的。为什么? select yr, count(*) from (actor join casting on (actor.id = casting.actorid) join on (movie.id = casting.movieid) group by yr
select yr, count(*)
from
(actor join casting
on (actor.id = casting.actorid)
join
on (movie.id = casting.movieid)
group by yr
having actor.name='John Travolta'
从表名周围删除(
)
,并将电影添加到第二个联接中
select yr, count(*)
from actor join
casting on actor.id = casting.actorid join
movie on movie.id = casting.movieid
group by yr
having actor.name='John Travolta'
编辑:
您需要将您的having
切换到位置,因为having用于与您的groupby
连接的聚合函数
select yr, count(*)
from actor join
casting on actor.id = casting.actorid join
movie on movie.id = casting.movieid
where actor.name = 'John Travolta'
group by yr
join之后缺少第二个表名
- 使用
where
nothaving
试试这个:
select yr, count(*)
from actor
join casting on actor.id = casting.actorid
join movie on movie.id = casting.movieid -- you were missing table name "movie"
where actor.name='John Travolta' -- "where", not "having"
group by yr
还要注意我使用的一致格式。如果使用良好的格式,则更容易发现语法错误
仅供参考,having
用于聚合函数,例如having count(*)>3
若要联接,必须指定表ure联接,应
join movie
on movie.id = casting.movieid
从actor join casting on(actor.id=casting.actorid)join movie on(movie.id=casting.movieid)组中选择yr,count(*)按yr having actor.name='John Travolta'这忽略了真正的问题,也就是having子句,它将产生字段未找到错误。为什么用“where”代替“having”?我不想把整个表都过滤掉,只想从所有组中选出一组。否?@user311130:您确实要筛选整个表。用你的话说:“展示他拍的电影数量”,其中“他”的意思是约翰·特拉沃尔塔。所以,你们真的只关心关于约翰·特拉沃尔塔的数据,而不关心其他人。试过你们的解决方案。成功了。但是如果我想选择计数最高的行(第一位有两行)怎么办?在查询的末尾添加orderbycount(*)DESC
,首先显示最忙的年份。那么,@Bohemian也可以在他的回答中添加这一点。您需要将他的查询(作为子查询)包含在外部查询中,并使用MAX()
。