SQL根据第三列

时间:2018-05-24 19:43:47

标签: sql oracle oracle11g

我想编写一个SQL查询,根据第三列(本例中为Price)生成组和子组的排名。虽然我知道我们可以使用dense_rank()基于一列生成排名。我不知道如何在单个查询中生成如下所示的两列排名。

两个排名都是基于价格。所以J3首先是因为J3总和(价格)是1600. J1排在第二位,因为J1总和(价格)是1500,依此类推。

赞赏任何意见。

我提供了示例输入和输出。输入表的名称是“RENTAL”

enter image description here

2 个答案:

答案 0 :(得分:1)

首先将jet_type价格汇总到jet_type级别,然后创建按汇总价格排序的所有jet_types的排名,最后在jet_price分区的外部查询中使用您的窗口函数,并按最高汇总价格排序以创建rank_service_wthin_jet:

select a.jet_type, b.rownum rank_jet, a.service_type, a.price, 
  row_number() over(partition by a.jet_type order by a.price desc) rank_service_wthin_jet
  from yourtable a join (
  select jet_type, row_number() over(order by price desc) rownum from (
  select  jet_type, sum(price) price from yourtable
  group by jet_type)a)b on a.jet_type=b.jet_type

答案 1 :(得分:0)

您可以生成两列:

select t.*,
       dense_rank() over (order by jet_type) as rank_jet,
       row_number() over (partition by jet_type order by price desc) as rank_service_within_jet
. . .

这并不能完全返回表格中的内容。但结果非常相似 - 更重要的是 - 有意义。