簡體   English   中英

如何從 Oracle 數據庫中獲取 MAX

[英]How to get MAX from Oracle database

我正在嘗試從數據庫中獲取MAX ,但我正在嘗試兩種方法,如果兩種方法都正確,則需要清除。

這些是我的對象類型:

Emp_t (eno: number(4), ename: varchar2(15), edept: ref dept_t, salary: number(8,2))
Dept_t (dno: number(2), dname: varchar2(12), mgr ref emp_t)
Proj_t (pno: number(4), pname: varchar2(15), pdept ref dept_t, budget: number(10,2))

這些是我的表格:

Emp of Emp_t (eno primary key, edept references dept)
Dept of Dept_t (dno primary key, mgr references emp)
Proj of Proj_t (pno primary key, pdept references dept)

我的問題是:

Q.) 找出控制預算最大的項目的經理的名字

我的第一個回答是:

SELECT p.pdept.mgr.ename
FROM proj p
WHERE p.budget IN (SELECT MAX(p.budget) FROM proj p)

我的第二個答案是:

SELECT p.pdept.mgr.ename, MAX(p.budget)
FROM proj p

我需要知道哪個答案是正確的。 或者兩者都是對的。 如果一個是不正確的原因是什么?

你需要join 在最新版本的 Oracle 中,一個簡單的方法使用order byfetch

select e.name
from proj_t p join
     emp_t e
     on p.mgr = e.eno join
     dept_t d
     on p.pdept = d.dno
order by p.budget desc
fetch first 1 row only;

關鍵是你需要使用正確的、明確的、標准的JOIN語法。

你的兩個查詢都不對。

第一個查詢的問題 -

SELECT p.pdept.mgr.ename        ----- This is not the correct syntax
FROM proj p
WHERE p.budget IN (SELECT MAX(p.budget) FROM proj p)

select 子句的語法不正確。 語法應該是 -

SELECT e.name
FROM proj_t p 
INNER JOIN emp_t e ON p.mgr = e.eno
INNER JOIN dept_t d ON p.pdept = d.dno
WHERE p.budget = (SELECT MAX(budget) FROM proj_t);

第二個查詢的問題 -

SELECT p.pdept.mgr.ename, MAX(p.budget)   -----  You cannot use other columns with aggregate function without group by clause.
FROM proj p

請使用上面的查詢,你會得到你想要的結果。

如果您不想使用 MAX 或將輸出限制為一行:

SELECT p.pdept.mgr.ename
FROM proj p
WHERE NOT EXISTS(
    SELECT *
    FROM proj subp
    WHERE subp.budget > p.budget
)

這將在proj搜索更高的budet直到沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM