【问题标题】:How to select only the one highest value for different ID如何为不同的 ID 只选择一个最大值
【发布时间】:2021-02-27 11:57:15
【问题描述】:

我有这个问题:

select  room_id, sum(cost)
from maintenance
group by room_id

这给了我这个结果:

 ROOM_ID  SUM(COST)
   418       2080
   211        300
   220        500
   416       1800
   505        380
   301       5500
   110       4080
   114       2400
   202        300
   511       1200
   520       1780
   208       4860
   320        600
   411        900

但是我怎样才能从这张表中只得到最高的成本呢?意思是我想要这个输出

       ROOM_ID  SUM(COST)
       301       5500

我尝试过像 MAX(SUM(COST)) 这样的方法,但它总是给我一个错误

【问题讨论】:

    标签: sql oracle sql-order-by aggregate-functions sql-limit


    【解决方案1】:

    按顺序和限制:

    select  room_id, sum(cost) as total_cost
    from maintenance
    group by room_id
    order by total_cost desc 
    fetch first row with ties
    

    with ties 允许最高级别(如果有)。

    在 Oracle fetch 子句不可用,替代方法使用窗口函数:

    select *
    from (
        select  room_id, sum(cost) as total_cost, 
            rank() over(order by sum(cost) desc) rn
        from maintenance
        group by room_id
    ) t
    where rn = 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多