Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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_Sql Server_Count_Inner Join_Having Clause - Fatal编程技术网

如何开始这个SQL查询作业?

如何开始这个SQL查询作业?,sql,sql-server,count,inner-join,having-clause,Sql,Sql Server,Count,Inner Join,Having Clause,一家初创公司目前正在开发一款电影流媒体应用程序。一部电影可以属于一种或多种类型。下表给出了电影和类型的定义: TABLE genres id INTEGER PRIMARY KEY name VARCHAR(50) NOT NULL TABLE movies id INTEGER PRIMARY KEY name VARCHAR(50) NOT NULL TABLE moviesGenres movieId INTEGER REFERENCES moviesid

一家初创公司目前正在开发一款电影流媒体应用程序。一部电影可以属于一种或多种类型。下表给出了电影和类型的定义:

TABLE genres 
  id INTEGER PRIMARY KEY
  name VARCHAR(50) NOT NULL

TABLE movies 
  id INTEGER PRIMARY KEY
  name VARCHAR(50) NOT NULL

TABLE moviesGenres 
  movieId INTEGER REFERENCES moviesid
  genreId INTEGER REFERENCES genresid
  PRIMARY KEY(movieId, genreId)
特定的搜索参数要求所有电影都属于两种以上的类型,并且没有一种类型是“喜剧”

为上述条件编写一个查询,返回:

电影的名字。 电影所属类型的数量

编写考虑所有场景的查询: 我已经编写了此查询,但无法满足一个测试用例:

select m.name, count(mg.genreId)
from movies m
join 
moviesgenres mg
on m.id=mg.movieId
where mg.genreId not in (select id from genres where name='Comedy')
group by m.id,m.name
HAVING count(mg.genreId)>2
下面提到的是我缺少的测试用例:

Some movies have more genres, some movies are Comedy: Wrong answer

您可以使用聚合和having子句:


这样做的目的是不在where子句中过滤掉喜剧:这太早了,而且会阻止你确保电影不属于那种特定类型。相反,您可以使用所有类型,并使用having子句确保没有一种是喜剧。

此解决方案使用在sql server中测试的子查询和变量:

Declare @comedyGenreID int;
Select @comedyGenreID = id from genres where name='Comedy' 

Select name, genres
From (select m.name, count(g.id) as genres
      from movies m
      inner join moviesgenres mg on mg.movieid = m.id
      inner join genres g on g.id = mg.genreid
      where mg.genreid <> @comedyGenreID
      groupby m.name) as sq
Where genres > 2
我想您可以决定不使用该变量,也可以在子查询中直接使用“喜剧”字符串,如下所示:

where g.name <> 'Comedy'

任何人都可以在此sql查询中提供帮助,因为这不是一个正确的问题标题。我请求编辑以使标题与您的查询相关。如果您不尝试,您将如何学习并完成自己的家庭作业?请在代码问题中给出一个-cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出,包括逐字记录错误消息;标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。调试基础。对于包含DBMS和DDL(包括约束和索引)的SQL,以表格式作为代码输入。在总体目标上暂停工作,在第一个表达中删去代码,不要给出你期望的,说出你期望的,为什么。
where g.name <> 'Comedy'