我是 SQL 初学者,我正在尝试使用子查询从 HackerRank 解决这个问题。你能告诉我我做错了什么吗?
问题
查询 STATION 中 CITY 名称最短和最长的两个城市,以及它们各自的长度(即:名称中的字符数)。如果有多个最小或最大的城市,请选择按字母顺序排列的第一个城市。
例如,CITY 有四个条目:DEF、ABC、PQRS 和 WXY。
样本输出
ABC 3
PQRS 4
说明
按字母顺序排序时,CITY 名称列为 ABC、DEF、PQRS 和 WXY,长度为 和 。最长的名称是 PQRS,但也有最短命名城市的选项。选择 ABC,因为它按字母顺序排在第一位。
我的解决方案
SELECT
CITY,
LENGTH(SELECT MAX(CITY)
FROM STATION) AS Length
FROM STATION
ROWNUM 1;
SELECT
CITY, LENGTH(SELECT MIN(CITY)
FROM STATION) AS Length
FROM STATION
ROWNUM 1;
您可以合并第一个和最后一个
CREATE tABLE A (city varchar(10))
INSERT INTO A VALUES ('DEF'),('ABC'), ('PQRS'), ('WXY')
(SELECT city , LENGTH(city) FROM A ORDER BY LENGTH(city) ASC,city LIMIT 1) UNION ALL (SELECT city , LENGTH(city) FROM A ORDER BY LENGTH(city) DESC,city LIMIT 1)
城市 |长度(城市) :--- | ------------: ABC | 3 PQRS | 4
db<>小提琴这里
我不使用 UNION 的解决方案:
select city,length(city) from station order by length(city),city limit 1;
select city,length(city) from station order by length(city) desc ,city limit 1;
选择前 1 个城市,LEN(CITY) AS city_length 从车站出发 其中 LEN(城市) = ( 选择分钟(LEN(城市)) 从车站出发 ) 按城市排序 选择前 1 个城市,LEN(CITY) AS city_length 从车站出发 其中 LEN(城市) = ( 选择最大(LEN(城市)) 从车站出发 ) 按城市订购