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

时间:2018-03-02 04:12:03

标签: mysql sql

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

示例输入

让我们说CITY有四个条目:DEFG,ABC,PQRSER和WXY

示例输出

ABC 3
DEFG 4
PQRSER 6

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

4 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

确定按城市名称的长度按城市名称排序。

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

答案 3 :(得分:0)

您只需使用子查询和聚合即可获得结果。

在MySQL中

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

查看DEMO on SQL Fiddle