按字母顺序选择第一个城市名称和相应的长度顺序

问题描述 投票:1回答:4

我认为是一个基于HackerRank问题的后续问题,并想知道是否可以通过SQL解决。

样本输入

假设CITY有四个条目:DEFG,ABC,PQRSER和WXY

样本输出

ABC 3
DEFG 4
PQRSER 6

我想知道我是否可以使用SQL按字母顺序排列城市和城市名称的长度。如果有相同长度城市的选项(例如ABC,WXY),我只想选择第一个城市名称,因为它首先按字母顺序排列。谢谢!

mysql sql
4个回答
1
投票

我认为你需要一个长度聚合。下面的子查询标识了城市每个字符长度的按字母顺序排列的名字。然后,我们加入这个子查询,给我们留下我们想要的城市名称,按长度排序。

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT MIN(city) AS first_city
    FROM yourTable
    GROUP BY CHAR_LENGTH(city)
) t2
    ON t1.city = t2.first_city
ORDER BY
    CHAR_LENGTH(t1.city);

Demo

注意:如果您真的只想要城市名称,那么以下就足够了:

SELECT MIN(city) AS first_city, CHAR_LENGTH(city) AS length_city
FROM yourTable
GROUP BY CHAR_LENGTH(city)
ORDER BY CHAR_LENGTH(city)

但在现实生活中,更典型的是,你会希望恢复整个记录,在这种情况下,我的第一个查询是更好的选择。


0
投票

当然只需按城市名称的长度订购,然后按城市名称。

SELECT * FROM Table ORDER BY Length(city), city;

0
投票
SELECT CITYNAME, LEN(CITYNAME) AS WORDLENGTH FROM <YOUR TABLE> ORDER BY CITYNAME, LEN(CITYNAME) ASC; 

0
投票

您可以使用子查询和聚合简单地实现结果。

在MySQL中

SELECT * FROM
(SELECT *, LENGTH(city) cityLength
FROM test
ORDER BY LENGTH(city), city) A
GROUP BY cityLength;

看到DEMO on SQL Fiddle

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