选择最短和最长的字符串

问题描述 投票:0回答:7

是否可以按表格中的字符选择最短和最长的字符串?

我有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

mysql sql
7个回答
1
投票

无论如何,我得到了答案

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;

1
投票

我读了上面的Midhun Manohar的评论: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; 

1
投票

我知道你已经选择了你的答案,但这里有一个较短的答案可能有所帮助。这是使用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
投票

您可以使用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


0
投票

尝试这些查询。

最长的城市名称::

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
投票

如果我理解正确的话,我认为你需要带有子查询的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
投票

我发现这个很简单:

`选择城市,长度(城市)从(选择城市从长度(城市)ASC,城市ASC订购)在哪里ROWNUM = 1;

选择城市,长度(城市)从(选择城市从长度(城市)DESC,城市ASC订购)在哪里ROWNUM = 1;`

© www.soinside.com 2019 - 2024. All rights reserved.