我如何使用rank函数来解决这个问题?

问题描述 投票:1回答:2

我有这些数据:

enter image description here

我想要这个结果:

enter image description here

所以我试过这个:

  SELECT  
      text_area,
      ordered_area,
      RANK () OVER (ORDER BY text_area) ranked_area
       FROM
      (  
      SELECT  '1200 AA' text_area ,1 ordered_area  
       FROM
      DUAL
      UNION ALL
      SELECT  '1200 AA'  ,2 
       FROM
      DUAL
      UNION ALL
      SELECT  '1200 BB'  ,3 
       FROM
      DUAL 
      UNION ALL
      SELECT  '1200 CC'  ,4 
       FROM
      DUAL 
      UNION ALL
      SELECT  '1200 CC'  ,5 
       FROM
      DUAL  
      )

但它没有解决我的问题。我该如何解决这个问题?

提前致谢

sql oracle oracle11g oracle10g ranking
2个回答
3
投票

DENSE_RANK不排名:

SELECT  
      text_area,
      ordered_area,
      DENSE_RANK () OVER (ORDER BY text_area) ranked_area
       FROM
      (  
      SELECT  '1200 AA' text_area ,1 ordered_area  
       FROM
      DUAL
      UNION ALL
      SELECT  '1200 AA'  ,2 
       FROM
      DUAL
      UNION ALL
      SELECT  '1200 BB'  ,3 
       FROM
      DUAL 
      UNION ALL
      SELECT  '1200 CC'  ,4 
       FROM
      DUAL 
      UNION ALL
      SELECT  '1200 CC'  ,5 
       FROM
      DUAL  
      )

1
投票

如果你想避免排名中的“差距”,你应该使用dense_rank而不是rank

DENSE_RANK () OVER (ORDER BY text_area) ranked_area
© www.soinside.com 2019 - 2024. All rights reserved.