我有一个表Orders(id_trip,id_order),表Trip(id_hotel,id_bus,id_type_of_trip)和表Hotel(id_hotel,name)。
我想在表Orders中获得最常入住的酒店的名称。
SELECT hotel.name from Orders JOIN Trip on Orders.id_trip = Trip.id_hotel JOIN hotel on trip.id_hotel = hotel.id_hotel FROM (SELECT hotel.name, rank() over (order by cnt desc) rnk FROM (SELECT hotel.name, count(*) cnt FROM Orders GROUP BY hotel.name)) WHERE rnk = 1;
分布中的“最常出现的值”是统计学中的一个不同概念,带有一个技术名称。它称为发行版的MODE。Oracle具有此STATS_MODE()功能。https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions154.htm
STATS_MODE()
例如,使用EMP标准SCOTT架构中的表,select stats_mode(deptno) from scott.emp将返回30-拥有最多员工的部门编号。(30是部门的“名称”或编号,不是该部门的员工人数!)
EMP
SCOTT
select stats_mode(deptno) from scott.emp
30
在您的情况下:
select stats_mode(h.name) from (the rest of your query)
注意 :如果两个或多个酒店并列为“最频繁”酒店,STATS_MODE()则将返回其中一家(不确定)。如果需要所有绑定值,则将需要其他解决方案- 文档中有一个很好的例子(上面链接)。这是Oracle理解和实施统计概念的一个已记录的缺陷。