我认为一个基于HackerRank问题的后续问题,并想知道是否有可能通过SQL解决。
样本输入
假设这个城市有四个条目: DEFG、ABC、PQRSER和WXY
样本输出
ABC 3
DEFG 4
PQRSER 6我想知道是否可以使用SQL按字母顺序将城市和城市名称的长度与各自的长度排序。如果有相同长度的城市的选项(例如,ABC,WXY),我只想选择第一个城市名称,因为它是按字母顺序排列的。谢谢!
发布于 2018-03-02 04:22:50
我想你需要一个长度的聚合。下面的子查询按字母顺序标识城市每个字符的名称。然后,我们加入到这个子查询中,给我们留下我们想要的城市名称,并按长度进行排序。
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);
注意:如果您真的只想要城市名称,那么以下内容就足够了:
SELECT MIN(city) AS first_city, CHAR_LENGTH(city) AS length_city
FROM yourTable
GROUP BY CHAR_LENGTH(city)
ORDER BY CHAR_LENGTH(city)但是在现实生活中,更典型的情况是,您希望返回整个记录,在这种情况下,我的第一个查询是一个更好的选择。
发布于 2018-03-02 04:16:24
SELECT CITYNAME, LEN(CITYNAME) AS WORDLENGTH FROM <YOUR TABLE> ORDER BY CITYNAME, LEN(CITYNAME) ASC; 发布于 2018-03-02 04:16:42
当然,只需按城市名称的长度排序,然后按城市名称排序即可。
SELECT * FROM Table ORDER BY Length(city), city;https://stackoverflow.com/questions/49062702
复制相似问题