2010-09-12 110 views
0

所以我一整晚都在這樣做 - 不能完全理解我的作業,可悲的是我的教授在週末無法使用。我已經發布了一些這些問題,這是最後一個問題。我有一些事情要繼續下去,但它需要工作(並且從中得出結論我很想完全理解答案,所以我不需要再次提供類似的幫助)。這裏是:找到顯示最大電影數量的影院名稱和電話號碼。確保您的查詢在多個影院之間存在聯繫時有效。Oracle SQL問題 - 需要幫助

這裏是我的表格聲明(並感謝大家今晚幫助我,我欠你一大筆時間)。

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 2010-09-12 16:01:12

+0

@Codo - 嚴格來說它*是一個不同的問題,但你是對的:底層邏輯基本上是一樣的。 @BrianLang--這就是爲什麼一些人在SO上問人們問題的原因。人們已經回答了你的問題,所以你可以完成你的任務。但是看起來你實際上已經知道了* nothing,因爲你不能在稍微不同的上下文中應用來自一個解決方案的邏輯。 – APC 2010-09-12 17:03:19

+0

@Codo和@APC - 對於提出類似問題,你是絕對正確的。我認爲這走向了我學習的方式 - 雖然邏輯非常相似,但問題(在我眼中)是不同的。我很好地通過實例學習,雖然兩個答案都是相似的,但它們也是截然不同的。 @Martin史密斯感謝你的幫助,那就是我一直在尋找的。 @Codo和@APC - 抱歉給我們帶來的不便,將來我會花更多時間思考如何將過去的解決方案應用於未來的問題。謝謝大家的幫助,未來我會盡量不要過分依賴SO做家庭作業。 – 2010-09-12 17:33:25

回答

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;