gpt4 book ai didi

sql - 如何从表格中获取最高值,然后是最低值,然后是第二高值,然后是第二低值,依此类推

转载 作者:行者123 更新时间:2023-12-02 22:03:59 27 4
gpt4 key购买 nike

我有一个问题,如何从表格中获取最高值,然后获取最低值,然后获取第二高值。

例如:表中

Name        Value
----------------------
Apple 2
Pear 3
Pineapple 6
Mango 7
Kiwi 1

结果应如下所示:

Name           Value
-----------------------
Mango 7
Kiwi 1
Pineapple 6
Apple 2
Pear 3

谢谢!

最佳答案

我假设tsqlt标签本来是 tsql ,并且进一步表明这是针对 SQL Server 的:

;with Numbered as (
select Name,Value,
ROW_NUMBER() OVER (ORDER BY Value DESC) as rnDesc,
ROW_NUMBER() OVER (ORDER BY Value ASC) as rnAsc
from
@t
), MixedNumbered as (
select
Name,Value,
CASE WHEN rnDesc < rnAsc THEN rnDesc ELSE rnAsc END as rnFin,
rnAsc,
rnDesc
from
Numbered
)
select Name,Value from MixedNumbered order by rnFin,rnDesc

这是通过查找行号来工作的,同时考虑按从最高到最低和从最低到最高排序的列表(在 NumberedrnDescrnAsc 中)。然后,我们采用考虑这些排序中的任何一个时获得的最低行号( MixedNumberedrnFin )。

这应该生成两行 rnFin等于 1,两行等于 2,依此类推;将第 n 个最高行和第 n 个最低行配对,直到到达集合的中间。

然后,我们使用它对最终结果集进行排序 - 但使用通过考虑从高到低排序的值 ( rnDesc ) 获得的位置作为具有相同 rnFin 的每对行之间的平局断路器。值(value)。这意味着,对于每一对,值较高的行将首先出现。

要反转结果(首先是最低的,然后是最高的,第二低的,第二高的,等等),我们只需要更改最终的 ORDER BY rnFin,rnAsc 的条款.

关于sql - 如何从表格中获取最高值,然后是最低值,然后是第二高值,然后是第二低值,依此类推,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com