如何按行逆序获取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
相关产品推荐
相关产品推荐

