我正在进行一项黑客排名练习,其中我必须找到名称最短和最长的城市,如果名称中有许多相同数量的字符,则按字母顺序取第一个
这是提供的表格
经过多次尝试,我成功创建了这段有效的代码
SELECT * FROM (
SELECT CITY, LENGTH(CITY) AS LENGTH_CITY FROM STATION ORDER BY LENGTH_CITY ASC, CITY) WHERE ROWNUM = 1
UNION
SELECT * FROM (
SELECT CITY, LENGTH(CITY) AS LENGTH_CITY FROM STATION ORDER BY LENGTH_CITY DESC, CITY) WHERE ROWNUM = 1;
所以我的问题是,最初我编写了另一段不起作用的代码,我想知道为什么我必须将“WHERE ROWNUM = 1”单独放在 SELECT* 中才能使 UNION 工作?
SELECT CITY, LENGTH(CITY) AS LENGTH_CITY FROM STATION WHERE ROWNUM = 1 ORDER BY LENGTH_CITY ASC, CITY
UNION
SELECT CITY, LENGTH(CITY) AS LENGTH_CITY FROM STATION WHERE ROWNUM = 1 ORDER BY LENGTH_CITY DESC, CITY;
最佳答案
I was wondering why do I have to place the "WHERE ROWNUM = 1" separately in a SELECT* for the UNION to work?
它与UNION
无关,但与ORDER BY
有关。
您发布的第二个查询肯定不会执行您想要的操作,因为 WHERE
子句在 ORDER BY
之前执行,因此:
select city
from station
where rownum = 1
order by city
说:给我表中的第一个随机行,然后按城市
对该行进行排序。
因此:首先对行进行排序,然后取第一个:
select *
from (select city
from station
order by city
)
where rownum = 1
将其应用于您的情况,长度等等。
关于sql - 单独放置 WHERE 语句以使 UNION 函数起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63854799/