本文主要是介绍SQL61 给出employees表中排名为奇数行的first_name,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1. 题目
- 2. 题解
1. 题目
-
题目来源:SQL61 给出employees表中排名为奇数行的first_name
-
题目描述
在不打乱原序列顺序的情况下,输出:按first_name排升序后,取奇数行的first_name -
一张表
# employees 10001|1953-09-02|Georgi|Facello|M|1986-06-26 10002|1964-06-02|Bezalel|Simmel|F|1985-11-21 10005|1955-01-21|Kyoichi|Maliniak|M|1989-09-12 10006|1953-04-20|Anneke|Preusig|F|1989-06-02
-
所需结果
Georgi Anneke
2. 题解
这题有点小问题,题目要求结果的排序按照原表来,但是使用了窗口函数后顺序居然改变了,导致不通过(如下)。
SELECT t.first_name
FROM(SELECT *,ROW_NUMBER() OVER(ORDER BY first_name) rkFROM employees) t
WHERE t.rk % 2 != 0
后来有人说可以使用IN
,使用子查询 对first_name
进行过滤:
# 正解
SELECT first_name
FROM employees
WHERE first_name IN (SELECT t.first_nameFROM(SELECT *,ROW_NUMBER() OVER(ORDER BY first_name) rkFROM employees) tWHERE t.rk % 2 != 0)
注意下这题的需求:排序不变!,
以及从窗口函数子查询中取取数据会改变原有的排序顺序。
这篇关于SQL61 给出employees表中排名为奇数行的first_name的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!