我是甲骨文的新手,我正在做一些我在其中一个网站上发现的新东西。其中一项任务是从桌子上获取,哪家酒店住宿最多。我觉得这个问题真的很复杂,我不能自己解决,所以如果有人可以帮助我解决问题并解释为什么会这样,我会很高兴。
我以这种方式理解了这个问题,您必须连接VISITOR
,VISITED
,HOTEL
,OWNING
和OWNER
表。
解释。 OWNING
表正在将OWNERs
与HOTELs
和VISITED
表格连接,VISITORs
与HOTEL
相关联。
这是我的表格: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;
这是连接三个表,所以我将访客和酒店连接在一个表中,但我无法进一步。
我希望能够帮助我,所以我可以在这个例子上学到新东西。
另外谢谢!
答案 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)