哪家酒店住宿最多?

时间:2015-04-22 18:52:50

标签: oracle

我是甲骨文的新手,我正在做一些我在其中一个网站上发现的新东西。其中一项任务是从桌子上获取,哪家酒店住宿最多。我觉得这个问题真的很复杂,我不能自己解决,所以如果有人可以帮助我解决问题并解释为什么会这样,我会很高兴。

我以这种方式理解了这个问题,您必须连接VISITORVISITEDHOTELOWNINGOWNER表。

解释。 OWNING表正在将OWNERsHOTELsVISITED表格连接,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 个答案:

答案 0 :(得分:1)

  

哪家酒店住宿最多[?]

每次访问都对应表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
;

<强>更新

如果您希望 all 拥有最多访问次数的行,那么这就是一个不同的鱼。这是表达它的一种方式:

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)