[英]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.