sql 具有最大和最小函数的排序算法

sql sorting algorithm with max and min func

我有一个 table 有 1,2,3,4,5 个数字。我如何使用 T-SQL:

进行排序
 5,1,2,3,4 

但计数行必须为 5

你可以这样做。

SELECT top 5 t1.num
FROM SomeTable as t1, SomeTable as t2
GROUP BY t1.num
ORDER BY CASE
        WHEN t1.Num = MAX(t2.Num) THEN 1
        WHEN t2.Num = MAX(t2.Num) THEN 2
        ELSE 3
    END

一个简单的方法是使用 ORDER BYCASE:

SELECT id
FROM #t as t
ORDER BY CASE
           WHEN id = (SELECT MAX(id) FROM #t) THEN 1
           WHEN id = (SELECT MIN(id) FROM #t) THEN 2
           ELSE 3
         END

还有一个选择。这能够将 Min 和 Max 组合成一个查询。不确定性能优势有多大,但如果它很大 table 它可能会有所帮助。最简单的解决方案是 Giorgios 发布的解决方案。这个人在他出色的性能解决方案上会有轻微优势。

with Something(SomeID, SomeValue) as
(
    select 1, 'Minimum' union all
    select 2, 'asdf' union all
    select 3, 'qwer' union all
    select 4, 'ljkh' union all
    select 5, 'Maximum'
)
, MinMaxVal as
(
    select MAX(SomeID) as MaxSomeID
        , MIN(SomeID) as MinSomeID
    from Something
)

select s.*
from Something s
left join MinMaxVal mmv on mmv.MaxSomeID = s.SomeID or mmv.MinSomeID = s.SomeID
order by MaxSomeID desc
    , MinSomeID desc
    , s.SomeID desc
The Idea is to get the maximum and the remaining items in ascending order

Select  Tmax.*, -1 as zOrder From TbT as Tmax Where Tmax.ID = (Select Max(id) from tbt)
Union
Select Tmin.*, ID as zOrder From TbT as Tmin Where Tmin.ID <> (Select Max(id) from tbt)
Order by zOrder;

我只是相信它可以 运行 在大数据量上更快,因为最大值只计算两次。