题解 | #给出employees表中排名为奇数行的first_name#

给出employees表中排名为奇数行的first_name

https://www.nowcoder.com/practice/e3cf1171f6cc426bac85fd4ffa786594

这道题目要求我们给出employees表中排名为奇数行的first_name,我们要做的事情如下:

1. 确定总体问题

我们需要从员工表中提取名字,并按照名字的字母顺序排序后,输出排名为奇数的名字。

2. 分析关键问题

  • 排序名字并分配排名:使用ROW_NUMBER窗口函数按照名字的字母顺序为每个名字分配一个排名。
  • 筛选奇数排名的名字:通过WHERE子句筛选出排名为奇数的名字。

3. 解决每个关键问题的代码及讲解

步骤1:排序名字并分配排名

我们使用ROW_NUMBER窗口函数按照名字的字母顺序为每个名字分配一个排名:

select
    first_name,
    row_number() over(order by first_name asc) as rk
from employees
  • ROW_NUMBER() OVER (ORDER BY first_name ASC) AS rk:为每个名字分配一个排名,按照名字的字母顺序。
步骤2:筛选奇数排名的名字

我们通过WHERE子句筛选出排名为奇数的名字:

select 
    e.first_name as Georgi
from
    employees e
join 
    (
       --子函数
    ) sub on e.first_name = sub.first_name
where
    rk%2!=0
  • WHERE rk % 2 != 0:筛选出排名为奇数的名字。
  • 因为直接排序后输出会导致顺序变化,而题目要求原顺序输出,所以使用表连接。
  • 注意表连接和排序保持一致,否则容易导致顺序改变。

完整代码

select 
    e.first_name as Georgi
from
    employees e
join 
    (
        select
        first_name,
        row_number() over(order by first_name asc) as rk
        from employees
    ) sub on e.first_name = sub.first_name
where
    rk%2!=0;
全部评论

相关推荐

下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
仁者伍敌:服务员还要脱颖而出,这是五星级酒店吗
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务