Oracle SQL问题 - 需要帮助

时间:2010-09-12 15:57:35

标签: sql oracle

所以我整晚都这样做 - 对我的作业不太了解,遗憾的是我的教授在周末没有。我发布了一些这样的问题,这是最后一个问题。我有一些事情需要继续,但它需要工作(而且我想要完全理解答案,所以我不再需要类似的帮助)。在这里:找到显示最大电影数量的影院的名称和电话号码。当多个影院之间存在平局时,请确保您的查询有效。

以下是我的表格声明(感谢今晚所有人帮助我,我欠你很多时间)。

CREATE TABLE Theatres (
Name varchar2(50) not null,
City varchar2(50) not null,
State varchar2(50) not null,
Zip number not null,
Phone varchar2(50) not null,
PRIMARY KEY (Name)
);

CREATE TABLE Movies (
 Title varchar2(100) not null,
 Rating NUMBER not null,
 Length NUMBER not null,
 ReleaseDate date not null,
 PRIMARY KEY (Title),
 CHECK (Rating BETWEEN 0 AND 10),
 CHECK (Length > 0),
 CHECK (ReleaseDate > to_date('1/January/1900', 'DD/MONTH/YYYY'))
 );

CREATE TABLE ShownAt (
 TheatreName varchar2(50) not null,
 MovieTitle varchar2(100) not null,
 PRIMARY KEY (TheatreName, MovieTitle),
 FOREIGN KEY (TheatreName) REFERENCES Theatres(Name),
 FOREIGN KEY (MovieTitle) REFERENCES Movies(Title)
 );

我正在尝试将我从StackOverflow成员帮助中学到的一些东西应用到其他问题中,但我不确定如何根据列的最大结果返回一些内容。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是一种方式。

With T As
(
SELECT T.Name,  T.Phone, 
RANK() OVER (ORDER BY COUNT(S.MovieTitle ) DESC) AS Rnk
FROM Theatres T
JOIN ShownAt  S ON S.TheatreName= T.Name 
GROUP BY T.Name,  T.Phone
) 
SELECT Name, Phone
FROM T
WHERE Rnk=1;