Выберите самую короткую и самую длинную строку - PullRequest
0 голосов
/ 11 июня 2018

Можно ли выбирать самые короткие и длинные строки по символам в таблице?

У меня есть столбец CITY типа VARCHAR(20), и я хочу выбрать самые короткие и длинные названия городов в алфавитном порядке с помощьюдлина.

Я сделал так

SELECT CITY,LENGTH(CITY) FROM STATION WHERE LENGTH(CITY) IN ( SELECT MAX(LENGTH(CITY)) FROM STATION UNION SELECT MIN(LENGTH(CITY)) FROM STATION ) ORDER BY CITY ASC;

При алфавитном порядке, пусть названия CITY перечислены как ABC, DEF, PQRS и WXY, с соответствующимидлины 3,3,4 и 3. Очевидно, что город с самым длинным именем - это PQRS, но есть варианты для города с самым коротким именем;Я должен выбрать ABC, потому что он идет первым в алфавитном порядке.

В моем запросе все три CITY имели длину 3.

ABC 3 DEF 3 PQRS 4 WXY 3

Результат SELECT долженбыть

ABC 3 PQRS 4

Ответы [ 7 ]

0 голосов
/ 13 марта 2019

Я прочитал комментарий Мидхуна Манохара выше: https://stackoverflow.com/a/50813334/11129060

Я новичок, поэтому мне легче понять:

SELECT CITY, LENGTH(CITY)
FROM STATION
WHERE LENGTH(CITY) IN (
    SELECT MAX(LENGTH(CITY))
    FROM STATION
)
ORDER BY CITY ASC LIMIT 1;

SELECT CITY, LENGTH(CITY)
FROM STATION
WHERE LENGTH(CITY) IN (
   SELECT MIN(LENGTH(CITY))
   FROM STATION
)
ORDER BY CITY ASC LIMIT 1;

или другой пост кажетсябыть проще: https://stackoverflow.com/a/41285068/11129060

select CITY,LENGTH(CITY) from STATION order by Length(CITY) asc, CITY limit 1; 
select CITY,LENGTH(CITY) from STATION order by Length(CITY) desc, CITY limit 1; 
0 голосов
/ 07 июня 2019

Я нашел это простым:

`ВЫБЕРИТЕ ГОРОД, ДЛИНУ (ГОРОД) ИЗ (ВЫБЕРИТЕ ГОРОД ИЗ СТАНЦИИ ПО ЗАКАЗУ ДЛИНОЙ (ГОРОД) ASC, CITY ASC) ГДЕ ROWNUM = 1;

ВЫБЕРИТЕ ГОРОД, ДЛИНУ (ГОРОД) ИЗ (ВЫБЕРИТЕ ГОРОД ИЗ СТАНЦИИ, ЗАКАЗАТЬ ПО ДЛИНЕ (ГОРОД) DESC, ГОРОД ASC) ГДЕ ROWNUM = 1; `

0 голосов
/ 25 июня 2018

Я знаю, что вы уже выбрали свой ответ, но вот более короткий ответ, который может помочь.Это использует Microsoft MySQL Server, но его также можно легко преобразовать в любые другие типы, используя LIMIT вызова вместо TOP.

Кратчайшая длина

SELECT TOP 1 CITY, LEN(CITY)
FROM STATION 
ORDER BY LEN(CITY) ASC, CITY ASC;

Самая длинная длина

SELECT TOP 1 CITY, LEN(CITY)
FROM STATION 
ORDER BY LEN(CITY) DESC, CITY ASC;
0 голосов
/ 12 июня 2018

В любом случае я получил ответ

SELECT CITY,LENGTH(CITY)
FROM STATION
WHERE LENGTH(CITY) IN (
  SELECT MAX(LENGTH(CITY))
  FROM STATION
  UNION
  SELECT MIN(LENGTH(CITY))
  FROM STATION
)
ORDER BY LENGTH(CITY) DESC,CITY ASC LIMIT 2;
0 голосов
/ 11 июня 2018

Я думаю, вам нужно union с подзапросом, если я правильно понимаю:

select s.*
from station s
where length(city) in (select max(length(city)) 
                       from station 
                       union 
                       select min(length(city)) 
                       from station)
order by length(city);
0 голосов
/ 11 июня 2018

Попробуйте эти запросы.

Самое длинное название города ::

select CITY from STATION where char_length(CITY) = (select max(char_length(CITY)) from STATION)

Кратчайшее название города ::

select CITY from STATION where char_length(CITY) = (select min(char_length(CITY)) from STATION)
0 голосов
/ 11 июня 2018

Вы можете использовать оператор UNION

(SELECT CITY, MAX(LENGTH(CITY)) FROM STATION)
UNION
(SELECT CITY, MIN(LENGTH(CITY)) FROM STATION)
ORDER BY CITY ASC LIMIT 1;

Дополнительные примеры https://dev.mysql.com/doc/refman/8.0/en/union.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...