我认为是一个基于HackerRank问题的后续问题,并想知道是否可以通过SQL解决。
示例输入
让我们说CITY有四个条目:DEFG,ABC,PQRSER和WXY
示例输出
ABC 3
DEFG 4
PQRSER 6
我想知道我是否可以使用SQL按字母顺序排列城市和城市名称的长度。如果有相同长度城市的选项(例如ABC,WXY),我只想选择第一个城市名称,因为它首先按字母顺序排列。谢谢!
答案 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);
注意:如果您真的只想要城市名称,那么以下就足够了:
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;