2010-09-12 3 views
0

Так что я делаю это всю ночь - не могу понять мою домашнюю работу, и, к сожалению, мой профессор недоступен в выходные дни. Я опубликовал несколько из этих вопросов, это последнее. У меня есть кое-что, но нужно работать (и, исходя из этого, я хотел бы полностью понять ответ, поэтому мне больше не нужна помощь в чем-то подобном). Вот оно: Найдите имя и номер телефона в театре, где указано максимальное количество фильмов. Убедитесь, что ваш запрос работает, когда есть связь между несколькими театрами.Oracle SQL Question - Нужна помощь

Вот мой стол заявляет (и спасибо всем, кто помогает мне сегодня вечером, я должен вам большое время).

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 помощь в других вопросах, но я не знаю, как вернуть что-то на основе максимальных результатов колонки. Любая помощь будет принята с благодарностью.

+0

Разве это не тот вопрос, который вы задали несколько часов назад? http://stackoverflow.com/questions/3693574/oracle-sql-question – Codo

+0

@Codo - строго говоря, это * другой вопрос, но вы правы: основная логика в основном такая же. @BrianLang - вот почему некоторые люди опускают людей, задающих домашние вопросы в SO. Люди ответили на ваши вопросы, поэтому вы можете выполнить свое задание. Но, похоже, вы действительно научились * ничего, потому что вы не можете применить логику из одного решения в немного другом контексте. – APC

+0

@Codo и @APC - вы абсолютно правы, задавая похожие вопросы. Я думаю, это идет по пути, который я узнаю, - хотя логика очень похожа, проблема (в моих глазах) различна. Я изучаю ОЧЕНЬ хорошо на примере, и хотя оба ответа похожи, они также различны. @MartinSmith благодарит вас за помощь, вот что я искал. @Codo и @APC - извините за неудобства, в будущем я буду тратить больше времени на то, как применять прошлые решения для будущих проблем. Спасибо всем за вашу помощь, в будущем я постараюсь не так много опираться на СО для домашней работы. –

ответ

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; 
Смежные вопросы