【问题标题】:Display the city with the shortest and longest name显示名称最短和最长的城市
【发布时间】:2020-05-12 16:01:59
【问题描述】:

我正在做一个有人告诉我的问题:

"查询表中城市名称最短和最长的两个城市,以及它们各自的长度(即:名称中的字符数)。如果最小或最大城市不止一个,则选择其中一个按字母顺序排在第一位。”

我正在运行以下代码,但是它一直说我的答案是错误的:

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】:

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

    【讨论】:

      【解决方案2】:

      你也可以使用

      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 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-04
        • 1970-01-01
        • 1970-01-01
        • 2020-06-22
        • 1970-01-01
        • 2021-09-11
        相关资源
        最近更新 更多