-- 用于模仿原始表顺序添加一个新的顺序列
with employees_with_order as (
    select
        *,
        row_number() over () as original_order
    from
        employees
),
rank_emp as (
    select
        emp_no,
        row_number() over (order by first_name) as row_first
    from
        employees_with_order
)
select
    e.first_name
from
    employees_with_order e
    left join rank_emp re on e.emp_no = re.emp_no
where
    mod(re.row_first, 2) = 1
order by
    e.original_order;

用公用表达式写了好几遍,但是最开始没有加e.original_order,一直报错。

本来以为join 之后会按照employees原本的顺序输出,没想到不是啊。