Как получить самую короткую и самую длинную строку из таблицы? - PullRequest
0 голосов
/ 10 июня 2018

Предположим, у меня есть таблица Station в SQL Server:

|  ID  | Name |
+------+------+
|  1   | a    |
|  2   | b    |
|  3   | cc   |
|  4   | ddd  |
|  5   | eee  |

Я хочу получить самое короткое и самое длинное имя вместе с длиной (в случае связывания, оно будет отображаться в алфавитном порядке сверху 1)Итак, вывод будет

|  a  |   1  |
+-----+------+
| ddd |   3  |

Я попробовал это:

Select  
    Name, len(name) 
from 
    Station 
where 
    len(name) = (Select min(len(name)) from Station) 
union

Select  
    Name, len(name) 
from 
    Station 
where 
    len(name) = (Select max(len(name)) from Station) 

Но я должен сначала взять только в алфавитном порядке, что я не могу сделать

Ответы [ 3 ]

0 голосов
/ 10 июня 2018
select  *
from    (
        select  name
        ,       row_number() over (order by len(name), name) rn1
        ,       row_number() over (order by len(name) desc, name) rn2
        from    student
        ) sub
where   rn1 = 1  -- Shortest name
        or rn2 = 1  -- Longest name
0 голосов
/ 10 июня 2018

Ваш метод будет работать с небольшим изменением:

Select  min(Name) as name, len(name)
from Station 
where len(name) = (Select min(len(name)) from Station) 
group by len(name)
union all
Select min(Name) as name, len(name)
from Station 
where len(name) = (Select max(len(name)) from Station) 
group by len(name);

или:

Select min(Name) as name, min(len(name))
from Station 
where len(name) = (Select min(len(name)) from Station) 
union all
Select min(Name) as name, min(len(name))
from Station 
where len(name) = (Select max(len(name)) from Station) ;

То есть при агрегации вы получите одну строку.

0 голосов
/ 10 июня 2018
SELECT *
FROM
    (SELECT TOP(1) *, LEN(name) as ln
    FROM Student
    ORDER BY ln, name
    UNION
    SELECT TOP(1) *, LEN(name) as ln
    FROM Student
    ORDER BY ln DESC, name) as tblMain
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...