SQL根据第三列生成组和子组的列

SQL根据第三列生成组和子组的列,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我想编写一个SQL查询,根据第三列(本例中为Price)生成组和子组的列。虽然我知道我们可以使用densite_rank()根据一列生成列。我不知道如何在一个查询中生成如下所示的两列列列 这两个排名都是基于价格的。所以J3排在第一位,因为J3的总和(价格)是1600。J1排在第二位,因为J1总和(价格)为1500,依此类推 欢迎您的任何意见 我已经提供了示例输入和输出。输入表的名称为“RENTAL” 您可以生成两列,如下所示: select t.*, dense_rank() ov

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

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

欢迎您的任何意见

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


您可以生成两列,如下所示:

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
. . .

这并不完全返回表中的内容。但结果非常相似,而且——更重要的是——是有意义的。

首先将jet_类型的价格汇总到jet_类型的水平,然后根据汇总价格对所有jet_类型进行排序,最后,在外部查询中使用窗口函数,按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

我不知道
rank\u jet
的订单是如何确定的。欢迎来到Stack Overflow。请仔细阅读如何提供您可能也会从中受益的代码,是的,这意味着您必须在询问之前进行尝试,并将您的代码包括在内。请在表中提供示例数据和预期结果form@DanielMarcus-我不确定表格是否不可见。我已经提供了输入和输出。@GordonLinoff-这是用price完成的。编辑了这个问题以使它更清楚。希望有帮助!如果rank_jet与jet_类型相关,那么您为什么需要它?rank_jet与jet_类型不相关。@从您的示例中,rAmAnA似乎是1:1,如果您还可以提供一个简短的解释,这将非常有帮助。此外,向上投票可能有助于其他人。这种情况是否有一个我不知道的特殊名称?没有人会对这个问题进行投票,因为您没有以表格形式为我们提供数据。以pic的形式提供数据会使工作变得非常困难。现在请参考输出表。jet_类别排名很重要,因为我们首先根据他们排名,然后根据jet中提供的服务类型进行次排名。