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

如何按行逆序获取SQL数据?现有去重排序查询是否更优?

问题解答

原写法的简洁性分析

你的SQL写法逻辑通顺,能实现统一起点终点顺序+去重+按距离降序的需求,但不算最简洁——两次重复的case when存在冗余,可通过内置函数进一步简化。

更优实现方式

绝大多数主流SQL数据库(如MySQL、PostgreSQL、SQL Server)都支持LEAST()和GREATEST()函数,这两个函数可直接取出两个值中的较小值与较大值,完美替代你写的case when逻辑,让代码更精简:

SELECT DISTINCT
  LEAST(Source, Desti) AS Source,
  GREATEST(Source, Desti) AS Desti,
  DIST AS distance
FROM test_table
ORDER BY distance DESC;

逻辑说明

  • LEAST(Source, Desti):自动取Source和Desti中字典序更小的字段值,作为统一后的起点
  • GREATEST(Source, Desti):自动取字典序更大的字段值,作为统一后的终点
  • 搭配DISTINCT去重,最后按distance降序排序,完全匹配你的期望结果

如果你的数据库不支持这两个函数(极少数老旧版本),那原case when的写法就是可行的替代方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:16:07