最难理解的是 排序按照升序 取出奇数行 输出的时候不排序 就是按照原表排序

--窗口函数  计算出排名
with temp as(select 
    e.first_name,
    dense_rank() over (order by e.first_name ) as name_rank
from
    employees e
)
--同学们用窗口函数 没join直接输出 就是结果集对 但是顺序不对 ,
--因为题目说的是不排序输出,就是原表顺序输出
--join的原因  ;他会拿 前面的表就是原表 的第一行 去和 咋们的临时查询的 temp表去比较 依次比较 第二 第三行   所以顺序是 原表顺序
select 
    t.first_name
FROM
    employees e
join
    temp t
on
    e.first_name=t.first_name
WHERE
    t.name_rank%2!=0


--这是别人的写法,写的是真巧妙  但是我觉得他这个有点漏洞,就是不应该在比较上加上=号 ,有重名就会有bug    
-- 他在where里面有一个子查询 ,这个子查询的目的是什么 找到原表当前行的排名
-- e.first_name> e2.first_name   就是比当前name 小的有几行 
-- 不要加上等号 但是要在count(*)+1 这样排名就从一开始  重名也无所谓
--如果这样写 e.first_name>=e2.first_name    这样是有问题存在的   重名问题
-- 例子:  表里面first_name字段数据是这样    yzq   yzq    aa     
--那么俩个yzq的排名就是 3      aa的排名就是 1  这样就跳过了2  所以=要去掉。
--=去掉之后 再count(*)+1从这样  俩个yzq的排名 就是 2    aa排名就是 1 这样就不会出现问题了      
# SELECT
#     e.first_name
# from 
#     employees e
# WHERE
#     (select count(*) from employees e2
#      where e.first_name> e2.first_name) %2!=0