首页 > 解决方案 > SQLite ORDER:围绕中心分布结果

问题描述

是否可以以最高值位于中心并且较低值分布在中心直到结果集的开始和结束的方式来订购 SQLite 选择结果?

数据集:

5 
3 
2 
1 
1 
1 
1

期望的结果:

1 
1 
3 
5 
2 
1 
1

标签: sqlitesql-order-by

解决方案


使用ROW_NUMBER()窗口函数为每个值分配一个行号,并使用MAX()窗口函数获取每个值与表的最大值的差异,以便它们可以分布在最大值周围:

SELECT *
FROM tablename
ORDER BY CASE WHEN ROW_NUMBER() OVER (ORDER BY col) % 2 = 1 THEN -1 ELSE 1 END * 
         (MAX(col) OVER () - col)

更改col为列的名称。
请参阅演示


推荐阅读