为什么我的问题错了?
SELECT MIN(city), LENGTH(MIN(city))
FROM station
ORDER BY MIN(city) ASC
LIMIT 1;
SELECT MAX(city), LENGTH(MAX(city))
FROM station
ORDER BY MAX(city) ASC
LIMIT 1;
问题陈述:查询车站中两个城市的最短城市名和最长城市名,以及它们各自的长度(即:名称中的字符数)。如果有多个最小或最大的城市,请选择按字母顺序排列的第一个城市。
样本输入
例如,“城市”有四个条目:
CITY
----
DEF
ABC
PQRS
WXY
样本输出
ABC 3
PQRS 4
解释按字母顺序排列时,城市名称将按、def、pqrs和wxy列出,并带有长度和长度。最长的名称是pqrs,但也可以选择最短的命名城市。选择,因为它是按字母顺序排在第一位的。
注意:您可以编写两个单独的查询来获得所需的输出。它不必是单个查询。
1条答案
按热度按时间bq9c1y661#
MIN(city)
是词汇上最小的城市。因此,考虑到“亚琛”和“多佛”,它将是“亚琛”。以及LENGTH(MIN(city))
是那个城市的长度,所以是6,不是5。要获得最短的城市名称,您需要以下内容:
按长度分组,
min(city)
将为每个长度查找词汇最少的城市名称。同样,对于最长的名称:
(仍然为每个长度选择词汇上的第一个城市名称,但按长度降序排列,而不是按长度升序排列)。
要在单个查询中同时获取这两个信息,最容易使用窗口函数(需要mysql 8.0或mariadb 10.2或更高版本):
在早期版本中,这样做最简单:
(这看起来可能是一个更简单的查询,但不能使用城市索引)。