【问题标题】:Selecting MAX of a Value from multiple categories from a table从表中的多个类别中选择一个值的最大值
【发布时间】:2022-08-07 18:11:33
【问题描述】:

我正在寻找最大重量的苹果、橙子、芒果——可能有任意数量的水果。表中的粗体项目是我希望得到的查询响应。

我知道这可以通过对表进行分区来完成,例如:

SELECT fruits,max(weight) OVER(PARTITION BY fruits) 
FROM fruitstat
GROUP BY fruits;

但这并没有得到我的预期结果。我需要那些在其类别中重量最大的水果。

Fruits Color Weight
Apple red 23
Orange orange 6
Mango yellow 13
Apple red 15
Orange orange 19
Mango yellow 16
Apple red 44
Orange orange 31
Mango yellow 12
Apple red 14
Orange orange 22
Mango yellow 11
  • SELECT fruits,max(weight) max_weight FROM fruitstat GROUP BY fruits;

标签: sql oracle


【解决方案1】:

只需将 MAX(weight) 按水果分组:

WITH fruit AS
(
  SELECT 'Apple' as fruits,'red' as color ,23 as weight FROM dual UNION ALL
  SELECT 'Orange','orange',6  FROM dual UNION ALL
  SELECT 'Mango','yellow',13  FROM dual UNION ALL
  SELECT 'Apple','red',15     FROM dual UNION ALL
  SELECT 'Orange','orange',19 FROM dual UNION ALL
  SELECT 'Mango','yellow',16  FROM dual UNION ALL
  SELECT 'Apple','red',44     FROM dual UNION ALL
  SELECT 'Orange','orange',31 FROM dual UNION ALL
  SELECT 'Mango','yellow',12  FROM dual UNION ALL
  SELECT 'Apple','red',14     FROM dual UNION ALL
  SELECT 'Orange','orange',22 FROM dual UNION ALL
  SELECT 'Mango','yellow',11  FROM dual
)
SELECT fruits, MAX(weight)
  FROM fruit
 GROUP BY fruits;

附言至少在您的样本数据中,苹果的 MAX 是 44,而不是 23

【讨论】:

    【解决方案2】:

    您不需要在窗口函数上使用group by。相反,您可以这样做。

    首先,使用rank 对水果重量进行排序。

    select rank() over (partition by fruits order by weight) as rank, fruits, weight
    from fruitstat
    

    之后,您可以使用子查询仅返回第一个值。

    select fruits, weight
    from (select rank() over (partition by fruits order by weight) as rank, fruits, weight from fruitstat) a
    where rank = 1
    

    【讨论】:

      猜你喜欢
      • 2020-05-28
      • 2018-10-29
      • 2018-08-24
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      相关资源
      最近更新 更多