问题:请你在不打乱原序列顺序的情况下,输出:按first_name排升序后,取奇数行的first_name。
拆解问题:1.先提取出字段firstname,员工编号emp_no,创建一个新的字段rank()over(order by first_name)重命名为r,得到新的表格re,re的内容是
first_name | r |
---|---|
name1 | 1 |
name2 | 2 |
name3 | 3 |
... |
2.用r&1来提取奇数列内容,(或者r%2=1)
3.题目要求不改变原有表格的排列顺序,所以需要在用两个表格链接一下,用新表格re和原始表格employees as e2链接,提取奇数列内容,然后根据原始表格e2中的员工编号排序,输出的firstname就是按照原始表格排序的内容了。
select re.first_name from employees e2
join
(select e.first_name,e.emp_no, rank()over(order by e.first_name) as r from employees e
order by r
) as re
on e2.emp_no=re.emp_no
where re.r &1
order by e2.emp_no