显示名称最短和最长的城市。

问题描述 投票:0回答:1

我在做一道题,有人告诉我。

"查询表格中两个城市的名字 最短和最长的城市名字 以及它们各自的长度(即:名字中的字符数) 如果有多个最小或最大的城市,按字母顺序排列时,选择先到的那个城市。"

我正在运行下面的代码,然而它一直说我的答案是错误的。

SELECT CITY, LEN FROM (

SELECT CITY, LENGTH(CITY) AS LEN, ROW_NUMBER() OVER (ORDER BY LEN, CITY ASC) as r
FROM STATION ) as a

WHERE r IN (1, (select count(*) from a))

为什么不能用?

mysql sql
1个回答
0
投票

使用 ROW_NUMBER() 两次得到最小和最大长度的城市。

SELECT t.CITY, t.LEN 
FROM (
  SELECT CITY, LENGTH(CITY) LEN, 
    ROW_NUMBER() OVER (ORDER BY LENGTH(CITY), CITY) as rn1,
    ROW_NUMBER() OVER (ORDER BY LENGTH(CITY) DESC, CITY) as rn2
  FROM STATION 
) t
WHERE 1 IN (t.rn1, t.rn2)

请看一个简化的 演示.


0
投票

您也可以使用

select  a.CITY,  t.max_len,  b.CITY,  t.min_len
from  (
    SELECT max(LENGTH(CITY)) max_len , min(LENGTH(CITY)) min_len 
    FROM STATION 
) t 
INNER JOIN STATION a ON a.LENGTH(CITY) = t.max_len  
INNER JOIN STATION b ON b.LENGTH(CITY) = t.min_len 
© www.soinside.com 2019 - 2024. All rights reserved.