美文网首页
MySQL 子查询中的order by 不生效

MySQL 子查询中的order by 不生效

作者: 帮我的鸵鸟盖个章 | 来源:发表于2021-02-08 16:35 被阅读0次

    MySQL 子查询中的order by 不生效记录

    我们知道group by 会保留第一条数据,当数据库中同一个字段值对应多条不同数据时,加入我们需要取最小的创建时间,可以先写一个子查询,通过时间正序,然后再 group by 即可得到分组中最小创建时间的数据。

    但是在 MySQL5.7版本中,子查询的order by 会被优化,然后你实际取得的数据并不是你排序后想要的数据。

    网上很多的说法是 在子查询中加入 limit,使 order by 不被单独使用,就可以达到想要的效果。但实际上,这样也是不行的。

    像下面的查询,实际上是达不到想要的效果的,取得的数据也不是排序后的数据。

    SELECT
        tRecord.business_no 
    FROM
        ( SELECT business_no, call_time FROM call_record WHERE business_type = 1 ORDER BY call_time DESC LIMIT 20000 ) tRecord 
    GROUP BY
        tRecord.business_no 
    

    实际发现加了limit 仍然未生效。

    正确应该是,在 group by的时候同时使用 order by,即可生效,如下:

    SELECT
        tRecord.business_no 
    FROM
        ( SELECT business_no, call_time FROM call_record WHERE business_type = 1 ORDER BY call_time DESC LIMIT 20000 ) tRecord 
    GROUP BY
        tRecord.business_no 
    ORDER BY
        tRecord.call_time DESC
    

    相关文章

      网友评论

          本文标题:MySQL 子查询中的order by 不生效

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