连接两个查询时出现问题 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;
我对这样的员工有一个 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;