如何解决有人可以说我在mysql中做错了吗?
在下面的任务中 Hackerrank 我做了那个查询
SELECT CITY,length(CITY ) from STATION where length(CITY )in(
select max(length(CITY ))from STATION union select min(length(CITY ))from STATION )Group by length(CITY )
order by length(CITY ) desc,CITY ;
我收到了Error 我也这样查询另一个问题
Select max(length(CITY)),CITY from STATION Group by length(CITY) Order by length(CITY)Desc;
并收到该错误 Error
解决方法
问题短语为:
查询STATION中两个带有最短和最长CITY名称以及它们各自长度(即名称中字符数)的城市。如果最小或最大的城市不止一个,请按字母顺序选择最先出现的城市。
您实际上不需要聚合即可完成此任务。
我认为用union all
和两个行限制查询(一个按升序对城市进行排序,另一个按降序对城市进行排序)表示起来会更简单:
(
select city,char_length(city) cnt_chars
from station
order by char_length(city),city limit 1
) union all (
select city,char_length(city)
from station
order by char_length(city) desc,city limit 1
)
如果表中只有一个城市(或者所有城市的长度都相同),那么union
可能比union all
更合适(因此同一城市不会在列表中出现两次)结果集)。
或者,如果您正在运行MySQL 8.0,则可以使用窗口函数:
select city,cnt_chars
from (
select s.*,row_number() over(order by char_length(city),city) rn_asc,row_number() over(order by char_length(city) desc,city) rn_desc
from station s
) s
where 1 in (rn_asc,rn_desc)
旁注:char_length()
比length()
安全。前者计算字符,而后者计算字节(如果您的字符串包含多字节字符,那么这不是您想要的)。
您尝试选择CITY
的名称和length(CITY)
,但只能按length(CITY)
进行分组。如果两个或两个以上城市对length(CITY)
具有某些值,则mysql不知道应选择CITY
中的哪个。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。