暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何按字母顺序排序并获得排名第二的行

askTom 2018-09-06
365

问题描述

嗨,汤姆,

如何按字母顺序对数据进行排序并分配它们的等级

我有数据并分配排名 (排名必须按字母顺序分配),就像这样。
为此,我过去常常点菜,

A   ADAMS-1
    ALLEN-2
B   BLAKE-1
C   CLARK-1
F   FORD-1
J   JAMES-1
J   JONES-2
K   KING-1
M   MARTIN-1
    MILLER-2
S   SCOTT-1
    SMITH-2
T   TUNNER-1
W   WARD-1
复制


所以,这应该像所有二级员工一样
o/p:
ALLEN-2
JONES-2
MILLER-2
SMITH-2
复制


不可能在一个select语句中使用任何REG_EXP


谢谢,
卡纳卡





专家解答

所以你想用第一个字母来排名名字?并且只返回每个排名第二的行?

您可以使用row_number进行排名。分区by子句将行拆分为单独的排名组。因为这是第一个字母,所以只需substr名称即可获得此名称。

看起来像:

with rank_names_by_letter as (
  select last_name,
         row_number () over ( 
           partition by substr ( last_name, 1, 1 ) 
           order by last_name 
         ) rn
  from   hr.employees
  where  department_id = 50
)
  select * 
  from   rank_names_by_letter
  order  by last_name;

LAST_NAME     RN   
Atkinson         1 
Bell             1 
Bissot           2 
Bull             3 
Cabrio           1 
Chung            2 
Davies           1 
Dellinger        2 
Dilly            3 
Everett          1 
Feeney           1 
Fleaur           2 
Fripp            3 
Gates            1 
Gee              2 
Geoni            3 
Grant            4
...
复制


从这里开始,只需添加一个where子句来显示每个字母的第n个。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论