我在做一道题,有人告诉我。
"查询表格中两个城市的名字 最短和最长的城市名字 以及它们各自的长度(即:名字中的字符数) 如果有多个最小或最大的城市,按字母顺序排列时,选择先到的那个城市。"
我正在运行下面的代码,然而它一直说我的答案是错误的。
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))
为什么不能用?
使用 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)
请看一个简化的 演示.
您也可以使用
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