MySQL 中的 SQL 子查询问题。 WHERE、SELECT 或 FROM 中的子查询?

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

我是 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;
mysql subquery
3个回答
0
投票

您可以合并第一个和最后一个

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<>小提琴这里


0
投票

我不使用 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;

0
投票

选择前 1 个城市,LEN(CITY) AS city_length 从车站出发 其中 LEN(城市) = ( 选择分钟(LEN(城市)) 从车站出发 ) 按城市排序 选择前 1 个城市,LEN(CITY) AS city_length 从车站出发 其中 LEN(城市) = ( 选择最大(LEN(城市)) 从车站出发 ) 按城市订购

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