2011-12-13 46 views
1

任何人都可以幫助我嗎?處理大多數財產的人的更新工資

我需要將處理最多財產的人的薪水提高1000英鎊。

人員:

staffno | salary 
_________________ 
A1  | 12000 
_________________ 
A2  | 9000 
_________________ 
A3  | 11000 
_________________ 
A4  | 3000 

物業:

propertyno | staffno 
_____________________ 
B23  | A2 
_____________________ 
B76  | A2 
_____________________ 
B34  | A1 

UPDATE staff 
SET salary = salary +1000 
WHERE EXISTS 
(SELECT staffno 
FROM property 
GROUP BY staffno 
ORDER BY COUNT(*) DESC 
LIMIT 1); 

所以這是我迄今爲止得到的,但它更新所有的值不是我希望它的1。

+2

這是你的功課? – hungneox 2011-12-13 17:55:21

+0

@eureka看起來像它。 – abhi 2011-12-13 17:57:04

回答

3

首先,你需要計算每個職員有多少財產。通過嘗試這種與COUNT函數熟悉:

SELECT COUNT(*) 
FROM Property; 

你應該看到的結果3(基於上面顯示的數據),在表的每一行。當然,總行數對你來說並沒有什麼好處......你想知道每個職員的最高數量。 COUNT是一個聚合或組級別的函數,這意味着您必須執行GROUP BY查詢。試試這個:

SELECT staffno, COUNT(*) 
FROM Property 
GROUP BY staffno; 

基本上,「GROUP BY staffno」告訴MySQL來只顯示每個staffno一行,而COUNT總和向上行每個staffno總數。現在,你想staffno分組數據通過他們的屬性的數量進行排序,所以加一個ORDER BY的底部:

SELECT staffno, COUNT(*) 
FROM Property 
GROUP BY staffno 
ORDER BY COUNT(*); 

...這是不正確的順序要麼,所以要確定你把它放在DESCending命令中。

SELECT staffno, COUNT(*) 
FROM Property 
GROUP BY staffno 
ORDER BY COUNT(*) DESC; 

外接一個LIMIT 1讓高層結果,跌落在選擇計數(*),你應該能夠推測出其staffno擁有最財產。做那個工作,然後給UPDATE一個鏡頭。如果您仍然需要幫助,請務必用您的UPDATE代碼嘗試編輯您的文章。

良好的嘗試......你是如此接近。所有你需要做的,就是修改您到哪裏尋找該行的「staffno」,你在子查詢更新,就像這樣:

UPDATE staff 
SET salary = salary +1000 
WHERE staffno = 
(SELECT staffno 
FROM property 
GROUP BY staffno 
ORDER BY COUNT(*) DESC 
LIMIT 1);