我有一个表 Orders(id_trip, id_order),表 Trip(id_hotel, id_bus, id_type_of_trip) 和表 Hotel(id_hotel, name)。
我想获取表订单中最常去的酒店的名称。
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;
分布中“最常出现的值”是统计学中的一个独特概念,有一个技术名称。它被称为分布的模式。甲骨文有STATS_MODE()
为它发挥作用。https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions154.htm
例如,使用EMP
标准中的表SCOTT
模式,select stats_mode(deptno) from scott.emp
将返回30
- 员工最多的部门的数量。 (30 是部门“名称”或编号,不是该部门的员工人数!)
在你的情况下:
select stats_mode(h.name) from (the rest of your query)
Note:如果两个或更多酒店并列为“最常入住”,那么STATS_MODE()
将返回其中之一(非确定性)。如果您需要所有绑定值,则需要不同的解决方案 - 文档(上面链接)中有一个很好的示例。这是 Oracle 对统计概念的理解和实现中记录的缺陷。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)