簡體   English   中英

SQL獲取其他值的MAX

[英]Sql get MAX for other value

我想弄清楚如何選擇一個表,該表的值是薪水最高的人的ID。

所以如果我有

表格=工作

JobID  Pay
----------
12345  10  
12346  12  
12347  13

table = thePerson

Person   JobID   
--------------
Person1  1  
Person2  2  
Person3  3

table =雇用(FKs)

JobID  PersonID
----------------
12345  2  
12347  1  
12346  3

我希望它顯示最高工資的人,所以它應該顯示

Person1

我嘗試對max函數使用where,但是它似乎失敗了。 這些組函數讓我感到很困惑。 我想我問的更多的是如何使用組函數作為約束。 因為我之前有類似的問題。

SELECT p.Person
FROM person p JOIN hire h ON p.PersonID = h.PersonID
  JOIN theJobs j ON h.JobID = j.JobID
ORDER BY j.Pay DESC
LIMIT 1;

如果使用的是不支持LIMIT子句的RDBMS,請嘗試使用TOP子句:

SELECT TOP 1 p.Person
FROM person p JOIN hire h ON p.PersonID = h.PersonID
  JOIN theJobs j ON h.JobID = j.JobID
ORDER BY j.Pay DESC

該解決方案幾乎可以在任何數據庫系統中工作:

Select ....
From thePerson As P
    Join    (
            Select H1.PersonId, Max( J1.Pay ) As MaxPay
            From hire As H1
                Join theJobs As J1
                    On J1.JobId = H1.JobID
            Group By H1.PersonId
            ) As PayPerPerson
        On PayPerPerson.PersonId = P.Person
Where Exists    (
                Select 1
                From hire As H2
                    Join theJobs As J2
                        On J2.JobId = H2.JobID
                Where H2.PersonId = P.Person
                Having Max( J2.Pay ) = PayPerPerson.MaxPay
                )

如果使用支持排名功能和公用表表達式(例如SQL Server 2005和更高版本)的DBMS,則此問題會更容易。 此解決方案將僅顯示一個名稱,並忽略聯系:

With RankedPay As
    (
    Select  ...
        , Row_Number() Over( Order By J.Pay Desc ) As Rnk
    From thePerson As P
        Join hire As H
            On H.PersonId = P.Person
        Join theJobs As J
            On J.JobId = H.JobId
    )
Select ...
From RankedPay
Where Rnk = 1

此解決方案將顯示所有與最高薪資相匹配並包含平局的人:

With RankedPay As
    (
    Select  ...
        , Rank() Over( Order By J.Pay Desc ) As Rnk
    From thePerson As P
        Join hire As H
            On H.PersonId = P.Person
        Join theJobs As J
            On J.JobId = H.JobId
    )
Select ...
From RankedPay
Where Rnk = 1

暫無
暫無

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

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