Oraclesql按分数排倒序,生成序号

表中的数据:1、有多个年份的,比如有2021、2022、2023和2024年的2、需求:给每个年份,单独都按照分数排倒序,生成序号

现在使用dense_rank() over,可以生成序号,但是把所有年份的数据排在一起了,怎么分开排序号呢?

SQL 来无影 发布于 2024-3-6 14:22
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
JL98Lv6中级互助
发布于2024-3-6 14:28

SELECT

    year,

    id,

    score,

    DENSE_RANK() OVER (PARTITION BY year ORDER BY score DESC) as rank_within_year

FROM

    your_table

ORDER BY

    year,

    rank_within_year,

    score DESC;

在这个查询中:

year是您想要分区的列,它表示数据的年份。

score是您想要根据其排序的列。

DENSE_RANK()函数在OVER子句中使用了PARTITION BY year,这意味着它会为每个year值创建一个分区,并在每个分区内根据score的降序排列生成序号。

最佳回答
0
shirokoLv6资深互助
发布于2024-3-6 14:27

oracle开窗函数的分组排序,over里面加partition by 分组,

over(partition by 年份 order by 分数)

最佳回答
0
华莉星宸Lv6高级互助
发布于2024-3-6 14:32

with aa as

 (select '2020' as accyear, 99 as nnum from dual

  union all

  select '2021' as accyear, 88 as nnum

    from dual

  union all

  select '2022' as accyear, 92 as nnum

    from dual

  union all

  select '2023' as accyear, 97 as nnum

    from dual)

select k.accyear, k.nnum, dense_rank() over(order by nnum desc) as 序号

  from aa k

image.png

  • 4关注人数
  • 208浏览人数
  • 最后回答于:2024-3-6 14:32
    请选择关闭问题的原因
    确定 取消
    返回顶部