2015-04-22 26 views
-3

我在Oracle很新,我正在做一些例子,我在其中一個網站上找到了一些新東西。其中一項任務是從餐桌上獲得最多的住宿。我發現這個問題真的很複雜,我不能自己解決,所以如果有人能夠幫我解釋和解釋爲什麼是這樣,我會很高興。哪家酒店住宿最多?

我明白這個問題以這種方式,你必須連接VISITORVISITEDHOTELOWNINGOWNER表。

解釋。 OWNING表正在連接OWNERs與它們的HOTELsVISITED表正在連接VISITORsHOTEL在其中他們留下。

這是我的表格:Pastebin link to my example

我迄今爲止嘗試是:

SELECT visitor.id, visitor.name, visitor.surname, hotel.name 
FROM visitor 
LEFT JOIN visiting 
ON visitor.id = visiting.tk_visitor 
LEFT JOIN hotel 
ON hotel.id = visiting.tk_hotel 
ORDER BY hotel.id ASC; 

這是連接三個表,所以我得到連接在一個表中游客和酒店,但我不能走的更遠。

我希望能夠幫助我,所以我可以在這個例子上學到一些新東西。

此外謝謝!

+1

Oracle和MySQL不是一回事。你在用哪個? – Barmar

+0

它不清楚你在結果中要求什麼。在你的發言中,我只看到你加入兩張桌子,而不是三張... – ryekayo

+0

@Barmar我正在使用ORACLE – HC1122

回答

1

which hotel has the most stayings[?]

每次訪問對應一個行表visited,所以你要在每家酒店的基礎計算的visited行。如果你只想要一個(那些之一)與大多數訪問,那麼你可以訂購通過訪問計數結果,並採取只有第一

select tk_hotel, count(*) as visits 
FROM visited 
GROUP BY tk_hotel 

:這就是這個。爲了讓酒店,而不是僅僅將其ID的,你應該加入先前的結果爲hotel表:

SELECT h.name, mv.visits 
FROM (
    SELECT tk_hotel, count(*) as visits 
    FROM visited 
    GROUP BY tk_hotel 
    ORDER BY count(*) DESC 
) mv 
    JOIN hotel h ON h.id = mv.tk_hotel 
WHERE ROWNUM = 1 
; 

更新

相反,如果你想有所有行最大訪問量,那麼這是一個不同的水壺。這裏有一種表達方式:

WITH visit_count AS (
    SELECT tk_hotel, count(*) as visits 
    FROM visited 
    GROUP BY tk_hotel 
) 
SELECT h.name, vc.visits 
FROM 
    hotel h 
    JOIN visit_count vc ON h.id = vc.tk_hotel 
WHERE vc.visits = (SELECT MAX(visits) FROM visit_count) 
+0

第一個代碼看起來不錯,但它只顯示有多少人在那裏。我想要酒店的名字。 第二個代碼不工作,或者我做錯了什麼。 – HC1122

+0

SQL錯誤:ORA-00907:缺少右括號 00907. 00000 - 「缺少右括號」 – HC1122

+0

對不起,如果我打擾你,但這個問題正在讓我瘋狂,我想解決它soooooooooo糟糕:/ – HC1122