2013-07-23 153 views
1

爲行錯誤值這是我的表結構:SQL MAX()函數返回最大值

Anees 1000.00 
    Rick 1200.00 
    John 1100.00 
    Stephen 1300.00 
    Maria 1400.00 

我試圖找到MAX(工資)和人的名字。

這是我使用

選擇MAX(工資),EMP_NAME 從EMP1

查詢我得到1400.00 and Anees.

雖然1400是正確的ANEES是錯誤的,它應該是瑪麗亞。我需要做什麼更改

+2

這是一個常見的問題/問題與MySQL因爲它不需要*使用在group-by中指定的所有聚合列或列:這是*不正確的混合聚合查詢*。在這種情況下,MySQL可以爲該列選擇任何*值並將其與聚合值一起返回。 – user2246674

+0

查看http://stackoverflow.com/questions/2081211/mysql-select-maxscore-doesnt-return-the-relevant-row-data-how-to-solve-the/2081287查看重複的問題,更好的解釋,以及這個查詢的解決方案。替代解決方案可以看到http://stackoverflow.com/questions/7604893/sql-select-row-from-table-where-id-maxid?lq=1和http://stackoverflow.com/questions/537223/mysql -control-which-row-is-by-group-by?lq = 1 – user2246674

回答

1

戈登給了一個解釋,爲什麼,並得到想要你想要的最簡單的方法。但是,如果你因爲某些原因想用MAX()你可以做這樣的

SELECT emp_name, salary 
    FROM emp1 
WHERE salary = 
(
    SELECT MAX(salary) salary 
    FROM emp1 
) 

輸出:

 
| EMP_NAME | SALARY | 
--------------------- 
| Maria | 1400 | 

下面是SQLFiddle演示

3

MySQL允許您在select語句中包含不在聚合函數中且不在group by子句中的列。返回任意值。

最簡單的方式做你想做的是:

select t.* 
from t 
order by salary desc 
limit 1; 
+0

當兩名僱員的最高工資相等時會發生什麼 –

+0

你會得到其中一個。 –