Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/math/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql:按加入和分组_Sql - Fatal编程技术网

sql:按加入和分组

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

有三张桌子:

电影(身份证、片名、年份、配乐、投票、, 导演)演员(身份证、姓名) 演员阵容(电影ID、actorid、ord)

问:你最忙的几年是什么 “约翰·特拉沃尔塔”。显示 他每年都拍电影

答:我的尝试在语法上是可行的。为什么?

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
    not
    having
试试这个:

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