mysql 显示具有最短和最长名称的城市

rbl8hiat  于 2023-01-25  发布在  Mysql
关注(0)|答案(3)|浏览(97)

我正在回答一个问题,我被告知:
“查询表中具有最短和最长城市名称的两个城市,以及它们各自的长度(即:名称中的字符数)。如果有多个最小或最大的城市,请选择按字母顺序排列的第一个城市。
我正在运行下面的代码,但是它一直说我的答案是错误的:

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))

为什么不管用?

ep6jt1vc

ep6jt1vc1#

使用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)

参见简化的demo

ryhaxcpt

ryhaxcpt2#

您还可以使用

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
jutyujz0

jutyujz03#

(选择城市、长度(城市),从站点顺序按长度(城市)升序,城市升序限制1)
所有接头
(选择城市、长度(城市),从车站订单按长度(城市)说明,城市上升限值1)

相关问题