选择最短和最长的字符串

Mid*_*hun 5 mysql sql

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

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

按字母顺序排列时,让城市名称列为 ABC、DEF、PQRS 和 WXY,长度分别为 3、3、4 和 3。命名最长的城市显然是 PQRS,但也有最短的选项-命名城市;我必须选择 ABC,因为它按字母顺序排在第一位。

我的查询最终以长度为 3 的所有三个 CITY 结束。

ABC 3 DEF 3 PQRS 4 WXY 3

SELECT 的结果必须是

ABC 3 PQRS 4

Mid*_*hun 11

无论如何我得到了答案

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;
Run Code Online (Sandbox Code Playgroud)

  • 如果你有一个包含 6 个城市的表:`XXX`、`YYY`、`ZZZ`、`OOOO`、`AAAAA`、`BBBBB` 怎么办?您的查询实际上变成“SELECT CITY, LENGTH(CITY) FROM STATION WHERE LENGTH(CITY) IN (5, 3) ORDER BY LENGTH(CITY) DESC, CITY ASC LIMIT 2;”您只会得到“AAAAA”和“BBBBB”结果是,这是两个最长的城市名称,而不是最长和最短的。 (2认同)

小智 8

我知道您已经选择了答案,但这里有一个简短的答案可能会有所帮助。这是使用 Microsoft MySQL Server,但也可以使用 call LIMIT 而不是 TOP 轻松转换为任何其他类型。

最短长度

SELECT TOP 1 CITY, LEN(CITY)
FROM STATION 
ORDER BY LEN(CITY) ASC, CITY ASC;
Run Code Online (Sandbox Code Playgroud)

最长长度

SELECT TOP 1 CITY, LEN(CITY)
FROM STATION 
ORDER BY LEN(CITY) DESC, CITY ASC;
Run Code Online (Sandbox Code Playgroud)

  • MySQL 和 Microsoft SQL Server 是不同的产品。 (2认同)