题解 | #给出employees表中排名为奇数行的first_name#
给出employees表中排名为奇数行的first_name
http://www.nowcoder.com/practice/e3cf1171f6cc426bac85fd4ffa786594
这个过程我会写的比较繁琐,但应该是最简单的理解方式,也是让我在加深记忆,大神直接避过就行!!!
这是原始表
按照题目的意思,是先对first_name 进行升序排列,然后排列完成的表中找到奇数行,再返回到原始表的顺序输出。
①:先对原始表做升序排列,这里用到窗口函数row_number() over()
SELECT *,ROW_NUMBER() OVER(ORDER BY first_name ASC) AS R
FROM employees;
由于我用的是5.7版本,窗口函数运行不了,所以只能用表格的方式来呈现结果
②:由于需要按照原表的顺序输出结果,所以还需进行量表连接
SELECT *,R
FROM employees E
LEFT JOIN (
SELECT *,ROW_NUMBER() OVER(ORDER BY first_name ASC) AS R
FROM employees
) AS D
ON E.emp_no=D.emp_no
输出结果如下
这样所需要的数据表已经全部整理出来
③输出R为奇书的first_name 只需加筛选条件即可
SELECT E,first_name
FROM employees E
LEFT JOIN (
SELECT *,ROW_NUMBER() OVER(ORDER BY first_name ASC) AS R
FROM employees
) AS D
ON E.emp_no=D.emp_no
WHERE D.R%2=1
输出结果。
