首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套选择或连接查询?

嵌套选择或连接查询?
EN

Stack Overflow用户
提问于 2018-12-09 01:13:25
回答 3查看 73关注 0票数 0

我对sql很陌生,所以这可能有一个非常基本的答案,但要回答的问题如下……

哪部电影在一场演出中收视率最低?在结果中包括电影名称和电影院名称。?

电影名电影院名在两个不同的表中,电影。takings在performance表中。我想不出如何完成这个查询。到目前为止,这是我所得到的,但在第3行第7列中附带了一个错误。

代码语言:javascript
复制
select cinema_no,film_no
from CINEMA, film
where takings ( select min(takings)
from performance);
EN

回答 3

Stack Overflow用户

发布于 2018-12-09 12:13:06

由于带有oracle的多个标记,我忽略了标记mysql (应该去掉的标记)。请确定您使用的是哪个DBMS,顺便说一下,我已经删除了不相关的oracle-sqldeveloper )。

您似乎需要这样一个select语句(更喜欢使用现代的ANSI-92联接语法,易于维护和理解),通过降序sum排序和row_number函数的贡献如下:

代码语言:javascript
复制
SELECT Name, Sum_Takings 
  FROM
  (
   SELECT f.Name, sum(p.Takings) Sum_Takings,
          row_number() over (ORDER BY sum(p.Takings)) as rn
     FROM Film f 
     LEFT JOIN Cinema c ON f.Cinema_ID = c.ID
     LEFT JOIN Performance p ON f.ID = p.id_film
    GROUP BY f.Name
   )
  WHERE rn = 1;

添加DDL语句,如下所示:

代码语言:javascript
复制
SQL>  CREATE TABLE Cinema (
  2     ID     integer PRIMARY KEY NOT NULL,
  3     Title  varchar2(100) NOT NULL
  4   );

Table created

SQL>  CREATE TABLE Film (
  2     ID   integer PRIMARY KEY NOT NULL,
  3     Name varchar2(100) NOT NULL,
  4     Cinema_ID integer
  5       CONSTRAINT fk_Cinema_ID REFERENCES Cinema(ID)
  6   );

Table created

SQL>   CREATE TABLE Performance (
  2     ID      integer PRIMARY KEY NOT NULL,
  3     ID_Film integer
  4          CONSTRAINT fk_Film_ID REFERENCES Film(ID),
  5     Takings integer
  6   );

Table created

SQL>  INSERT ALL
  2         INTO Cinema(ID,Title) VALUES(1,'NiteHawk')
  3         INTO Cinema(ID,Title) VALUES(2,'Symphony Space')
  4         INTO Cinema(ID,Title) VALUES(3,'The Ziegfeld')
  5         INTO Cinema(ID,Title) VALUES(4,'Cinema Village')
  6       SELECT * FROM dual;

4 rows inserted

SQL>  INSERT ALL
  2         INTO Film(ID,Name,Cinema_ID) VALUES(1,'Citizen Kane',1)
  3         INTO Film(ID,Name,Cinema_ID) VALUES(2,'Titanic',2)
  4         INTO Film(ID,Name,Cinema_ID) VALUES(3,'Brave Heart',4)
  5         INTO Film(ID,Name,Cinema_ID) VALUES(4,'Dumb and Dummer',3)
  6         INTO Film(ID,Name,Cinema_ID) VALUES(5,'How To Train Your Dragon',2)
  7         INTO Film(ID,Name,Cinema_ID) VALUES(6,'Beetle Juice',3)
  8       SELECT * FROM dual;

6 rows inserted

SQL>  INSERT ALL
  2         INTO Performance VALUES(1,1,15)
  3         INTO Performance VALUES(2,1,4)
  4         INTO Performance VALUES(3,2,10)
  5         INTO Performance VALUES(4,3,1)
  6         INTO Performance VALUES(5,4,5)
  7         INTO Performance VALUES(6,3,3)
  8         INTO Performance VALUES(7,2,7)
  9         INTO Performance VALUES(8,5,7)
 10         INTO Performance VALUES(9,6,6)
 11       SELECT * FROM dual;

9 rows inserted

SQL> commit;

Commit complete

SQL> SELECT Name, Sum_Takings
  2    FROM
  3    (
  4     SELECT f.Name, sum(p.Takings) Sum_Takings,
  5            row_number() over (ORDER BY sum(p.Takings)) as rn
  6       FROM Film f
  7       LEFT JOIN Cinema c ON f.Cinema_ID = c.ID
  8       LEFT JOIN Performance p ON f.ID = p.id_film
  9      GROUP BY f.Name
 10     )
 11    WHERE rn = 1
 12  ;

NAME                                                                  SUM_TAKINGS
--------------------------------------------------------------------- -----------
Brave Heart                                                                     4

https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=ec76db53517aacecea1c2fa979889fc8

票数 1
EN

Stack Overflow用户

发布于 2018-12-09 04:53:17

由于涉及性能表的分组,您可以使用两个查询来实现它,一个查询获取最低性能获取的cinemaID和filmID,另一个查询使用收集的ids获取电影院名称和电影名称。

从性能选择CinemaID、FilmID,其中选择PerformanceTaking=(从性能选择最小值(PerformanceTaking)); 从电影中选择CinemaName,FilmName,CinemaID=1和FilmID=1;

票数 0
EN

Stack Overflow用户

发布于 2018-12-09 13:36:04

这将起作用:

代码语言:javascript
复制
select * from (select c.cinema_name,f.film_name
from cinema c, film f,performance p,
rank() over (partition by c.cinema order by sum(p.takings)) as rank
where
c.ID=f.cinema_id and
f,id=p.id
group by f.film_name) where rank=1
;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53688551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档