2013-05-08 312 views
0

我想顯示薪水最高的玩家。爲什麼sql中的max函數返回多個值

select max(Salary) as highest_salary, p.[Last name] 
from tbl_PlayersTable as p, tbl_team as t 
where p.Team = t.TeamID 
and TeamID = 1000 
Group by p.[Last name] 

輸出是:

highest_salary Last Name 
    8000   Bosh 
    7000   Wade 
    6000   James 

我只是想顯示(8000波什,因爲他是薪水最高的球員)。

+0

SQL服務器2005 – user1954418 2013-05-08 07:29:23

+0

什麼是你的輸出? – 2013-05-08 07:35:55

+2

你爲什麼按姓氏分組? – Gibron 2013-05-08 07:39:53

回答

5

你我以前不需要MAX也不GROUP BY,只要使用TOP 1ORDER BY Salary DESC刪除。事情是這樣的:

select TOP (1) Salary as highest_salary, p.[Last name] 
from tbl_PlayersTable as p, tbl_team as t 
where p.Team = t.TeamID 
and TeamID = 1000 
ORDER BY Salary DESC 
1

您正在將值分組(最後參見Group By),因此您的最大值函數將計算每個組的最大值。如果你揮動絕對最大值,請刪除分組。

+0

它給出了一個錯誤,如果我刪除組,因爲我在我的選擇中有一個聚合函數 – user1954418 2013-05-08 07:30:19

+0

看到頂部的答案,它給你一個正確的查詢,只是用SELECT TOP取代LIMIT,正如我在那裏提到的,這將是sql服務器。 – ElDog 2013-05-08 07:32:56

+0

@ElDog如果他刪除組比,他不能得到他的姓wolud只有最大值 – 2013-05-08 07:38:17

0

因爲您使用group by p.[Last name],所以查詢將得到max(Salary)它找到了每個不同的Last name。所以,如果你想獲得的所有的Last namemax(Salary)底座時,必須group by

+0

它給出了一個錯誤,如果我刪除組,因爲我有我的選擇集合函數 – user1954418 2013-05-08 07:31:55

+0

如果是這樣的話,使用您當前的查詢作爲「子查詢」,並用'select max(Salary)作爲highest_salary,p。[姓氏] 從' – 2013-05-08 07:41:03

1

無需group by甚至max

select top 1 Salary 
,  [Last name] 
from tbl_PlayersTable 
where TeamID = 1000 
order by 
     salary desc 
0

您將需要採取頂部1值

select TOP (1) Salary as maxsalary, p.[Last name] 
    from tbl_PlayersTable as p 
    Inner join tbl_team as t on p.Team = t.TeamID 
    where TeamID = 1000 
    ORDER BY Salary DESC