连接两个查询时出现问题 Oracle SQL

Trouble when joining two queries Oracle SQL

我对这样的员工有一个 table:

ENAME     JOB 
Jack      Clerk
Adam      Manager
Raphael   President

我的想法是获取具有最大长度和最小长度的名称(每个 1 个),如果长度相同,则取按字母顺序排在第一位的名称(例如在Jack 和 Adam,都是 4 个字符,需要 Adam):

ENAME      LENGTH
Adam         4
Raphael      7

我找不到在一个唯一查询中执行此操作的方法,因此我尝试加入两个查询,但它一直给我错误 ('ORA-00933: SQL command not properly ended'),我不知道为什么:

SELECT ENAME, LENGTH(ENAME) FROM EMP
GROUP BY ENAME
HAVING LENGTH(ENAME) = (SELECT MAX(LENGTH(ENAME)) FROM emp) 
ORDER BY ENAME
FETCH FIRST 1 ROW ONLY
union all
SELECT ENAME, LENGTH(ENAME) FROM EMP
GROUP BY ENAME
HAVING LENGTH(ENAME) = (SELECT MIN(LENGTH(ENAME)) FROM emp) 
ORDER BY ENAME
FETCH FIRST 1 ROW ONLY;

一种方法使用聚合和 union all:

select min(name) keep (dense_rank first order by len(name) asc), min(len(name))
from emp
union all
select min(name) keep (dense_rank first order by len(name) desc, max(len(name))
from emp;

keep 语法是 Oracle 具有“第一个”聚合函数的相当冗长的方式。

SELECT ENAME, LENGTH(ENAME) FROM EMP
GROUP BY ENAME
HAVING LENGTH(ENAME) = (SELECT MAX(LENGTH(ENAME)) FROM emp) 
--ORDER BY 1
--FETCH FIRST 1 ROW ONLY
union 
SELECT ENAME, LENGTH(ENAME) FROM EMP
GROUP BY ENAME
HAVING LENGTH(ENAME) = (SELECT MIN(LENGTH(ENAME)) FROM emp) 
ORDER BY 1
FETCH FIRST 1 ROW ONLY;