是否可以按表格中的字符选择最短和最长的字符串?
我有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
无论如何,我得到了答案
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;
我读了上面的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;
我知道你已经选择了你的答案,但这里有一个较短的答案可能有所帮助。这是使用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;
您可以使用UNION运算符
(SELECT CITY, MAX(LENGTH(CITY)) FROM STATION)
UNION
(SELECT CITY, MIN(LENGTH(CITY)) FROM STATION)
ORDER BY CITY ASC LIMIT 1;
尝试这些查询。
最长的城市名称::
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)
如果我理解正确的话,我认为你需要带有子查询的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);
我发现这个很简单:
`选择城市,长度(城市)从(选择城市从长度(城市)ASC,城市ASC订购)在哪里ROWNUM = 1;
选择城市,长度(城市)从(选择城市从长度(城市)DESC,城市ASC订购)在哪里ROWNUM = 1;`