美文网首页
MySQL 跳过表中的n行

MySQL 跳过表中的n行

作者: 只是甲 | 来源:发表于2020-11-09 09:32 被阅读0次

    备注:测试数据库版本为MySQL 8.0

    一.需求

    需要显示emp表中根据ename排序的基数行,跳过偶数行

    二.解决方案

    求出行号,然后通过mod取余函数跳过偶数行

    -- 传统写法
    select x.ename
    from 
    (
    select  e.ename,
            (select count(*) from emp d where d.ename <= e.ename) rn
    from emp e
    order by e.ename
    ) x
    where mod(rn,2) = 1;
    
    -- MySQL 8.0分析函数写法
    SELECT x.ename
    from 
    (
    SELECT e.ename,
           row_number() over w as rn
    from emp e
    window w as ( order by e.sal )
    ) x
    where mod(rn,2) = 1;
    

    测试记录

    mysql>
    mysql> select x.ename
        -> from
        -> (
        -> select  e.ename,
        ->         (select count(*) from emp d where d.ename <= e.ename) rn
        -> from emp e
        -> order by e.ename
        -> ) x
        -> where mod(rn,2) = 1;
    +--------+
    | ename  |
    +--------+
    | ADAMS  |
    | BLAKE  |
    | FORD   |
    | JONES  |
    | MARTIN |
    | SCOTT  |
    | TURNER |
    +--------+
    7 rows in set (0.00 sec)
    
    mysql> SELECT x.ename
        -> from
        -> (
        -> SELECT e.ename,
        ->        row_number() over w as rn
        -> from emp e
        -> window w as ( order by e.sal )
        -> ) x
        -> where mod(rn,2) = 1;
    +--------+
    | ename  |
    +--------+
    | SMITH  |
    | ADAMS  |
    | MARTIN |
    | TURNER |
    | CLARK  |
    | JONES  |
    | FORD   |
    +--------+
    7 rows in set (0.00 sec)
    

    相关文章

      网友评论

          本文标题:MySQL 跳过表中的n行

          本文链接:https://www.haomeiwen.com/subject/nuttmktx.html