Count(), max(),min() 函数定义有很多选择
Count(), max(),min() fuctions definition with many selects
假设我们有一个 view/table hotel(hotel_n,hotel_name, room_n, price)
。我想找最便宜的房间。我尝试了 group by room_n
,但我希望酒店名称 (hotel_name
) 在不分组的情况下显示在看板上。
所以作为 sql(oracle 11g) 的业余爱好者,我从
开始
select hotel_n, room_n, min(price)
from hotel
group by room_n;
但它显示错误:ORA-00979: not a GROUP BY expression
。我知道我必须输入 group by room_n, hotel_n
,但我希望 hotel_n
可以在我创建的 table 中看到而不按它分组!
有什么想法吗?非常感谢!
聚合函数对于显示每组行的聚合信息很有用。如果您想从一组行中获取与其他组成员相关的特定行(例如,每个 room_n
的最便宜房间),您可能需要一个分析函数,例如 rank
:
SELECT hotel_n, hotel_name, room_n, price
FROM (SELECT hotel_n, hotel_name, room_n, price
RANK() OVER (PARTITION BY room_n ORDER BY price ASC) rk
FROM hotel) t
WHERE rk = 1
假设我们有一个 view/table hotel(hotel_n,hotel_name, room_n, price)
。我想找最便宜的房间。我尝试了 group by room_n
,但我希望酒店名称 (hotel_name
) 在不分组的情况下显示在看板上。
所以作为 sql(oracle 11g) 的业余爱好者,我从
开始select hotel_n, room_n, min(price)
from hotel
group by room_n;
但它显示错误:ORA-00979: not a GROUP BY expression
。我知道我必须输入 group by room_n, hotel_n
,但我希望 hotel_n
可以在我创建的 table 中看到而不按它分组!
有什么想法吗?非常感谢!
聚合函数对于显示每组行的聚合信息很有用。如果您想从一组行中获取与其他组成员相关的特定行(例如,每个 room_n
的最便宜房间),您可能需要一个分析函数,例如 rank
:
SELECT hotel_n, hotel_name, room_n, price
FROM (SELECT hotel_n, hotel_name, room_n, price
RANK() OVER (PARTITION BY room_n ORDER BY price ASC) rk
FROM hotel) t
WHERE rk = 1