Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql获取其他值的最大值_Sql - Fatal编程技术网

Sql获取其他值的最大值

Sql获取其他值的最大值,sql,Sql,我想知道如何选择一个表,其中的值是工资最高的人的ID 所以如果我有 表=作业 JobID Pay ---------- 12345 10 12346 12 12347 13 表=人员 Person JobID -------------- Person1 1 Person2 2 Person3 3 表=hireFKs JobID PersonID ---------------- 12345 2 12347 1 12346 3 我想让

我想知道如何选择一个表,其中的值是工资最高的人的ID

所以如果我有

表=作业

JobID  Pay
----------
12345  10  
12346  12  
12347  13
表=人员

Person   JobID   
--------------
Person1  1  
Person2  2  
Person3  3
表=hireFKs

JobID  PersonID
----------------
12345  2  
12347  1  
12346  3
我想让它显示最高支付的人,所以它应该显示

Person1
我尝试使用where作为Max函数,但似乎失败了。我对这些团体活动很差劲。我想我问的更多的是如何使用组函数作为约束。因为我之前也有类似的问题

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;
如果您使用的RDBMS不支持LIMIT子句,请尝试改用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
                )
如果您使用的DBMS支持排名函数和公共表表达式(如SQLServer2005及更高版本),那么问题就更容易解决。此解决方案将只显示一个名称并忽略关系:

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

如果两个人的工资相同,那么重复/联系又如何呢?你追求的是最高的薪水,还是每项工作最高的薪水?