簡體   English   中英

如何從SQL Server中的聚合方法獲取不同的值

[英]How to get distinct values from aggregate method in SQL Server

我想選擇最短和最長的名稱,如果有多個相同長度的名稱,我應該按名稱排序第一個

例如,如果我具有以下值:

'abc', 'def', 'abcd', 'defghi', 'ghi'

我應該得到類似

abc    3
defghi 6

這是我的查詢

select 
    Name, LEN(Name)
from 
    Customer
where 
    len(Name) = (select min(len(Name)) from Customer)
    or
    len(Name) = (select max(len(Name)) from Customer)
order by
    Name;

但是這就是我得到的

abc    3
def    3
defghi 6
ghi    3

我認為這是最容易與top union all最簡單方法:

select *
from ((select top 1 c.*
       from customer
       order by len(name) desc, name
      ) union all
      (select top 1 c.*
       from customer
       order by len(name) asc, name
      )
     ) t;

具有窗口功能:

with cte as(select *, 
                   row_number() over(order by len(name), name) rn1,
                   row_number() over(order by len(name) desc, name) rn2
            from Customer)
select name, len(name) from cte where rn1 = 1 or rn2 = 1

您可以按長度和名稱來訂購它們,例如:

declare @data table(name varchar(10))
insert into @data(name) values('abc'), ('def'), ('abcd'), ('defghi'), ('ghi')

Select name From (
    Select *
        , small = ROW_NUMBER() over(order by len(name), name)
        , big = ROW_NUMBER() over(order by len(name) desc, name)
    From @data
) t
Where small = 1 or big = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM