You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单条MySQL查询获取80条降序+20条升序的tbl_emails记录?

单条SQL实现混合排序的结果获取

当然可以用单条SQL完成这个需求,核心思路是用UNION ALL分别筛选两类数据后合并,具体写法如下:

SELECT id, email FROM tbl_emails ORDER BY id DESC LIMIT 80
UNION ALL
SELECT id, email FROM tbl_emails ORDER BY id ASC LIMIT 20;

关键细节说明:

  • 优先用UNION ALL而非UNION:UNION会自动做去重和全局排序,完全没必要且额外消耗性能;UNION ALL只是简单合并两个结果集,保留各自子查询的顺序,效率更高。
  • 子查询的逻辑:每个子查询通过ORDER BY+LIMIT精准筛选出80条最新(id降序)和20条最早(id升序)的记录,合并后结果会先展示80条降序数据,再展示20条升序数据。
  • 兼容性:这个写法在MySQL、PostgreSQL、SQLite等主流关系型数据库中都能正常运行,无需额外调整。

如果需要让合并后的整体结果按其他规则排序,可以在外层套一层查询,比如:

SELECT * FROM (
    SELECT id, email FROM tbl_emails ORDER BY id DESC LIMIT 80
    UNION ALL
    SELECT id, email FROM tbl_emails ORDER BY id ASC LIMIT 20
) AS combined
ORDER BY id DESC; -- 可根据需求修改整体排序逻辑

内容的提问来源于stack exchange,提问作者Manisha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:58:49