2017-03-14 92 views
1

我想更新我的表casegroup by聲明。group by + case statment

我有球員表,其中包括salary列,每行有group_name

我想更新所有的工資都高於平均團隊工資的球員。

首先我試着列出名字,球員薪水和球隊平均薪水。我有這個問題,我很樂意獲得幫助。

select first_name, 
     last_name, 
     group_name, 
     salary, 
     (
      select round(avg(salary),2) as salary 
      from players 
      group by group_name 
     ) 
from players 

感謝您的幫助!

+0

使用inner join作爲此senario –

+0

添加一些示例表格數據和預期結果 - 以及格式化文本。 – jarlh

+0

你會用什麼更新這些行的值? –

回答

0

使用GROUP BY子句中JOIN語句:

SELECT first_name,last_name,group_name,salary 
FROM players 
JOIN 
(
    SELECT ROUND(AVG(salary),2) as salary , group_name 
    FROM PLAYERS 
    GROUP BY group_name 
) A ON A.group_name = players.group_name 
0

這個SQL將找到各自的球員,並與平均工資爲組更新他的薪水: -

MERGE INTO MyTable MyTable 
USING 
(
    SELECT a.player, 
      a.[group], 
      a.sal, 
      b.sal2 
    FROM MyTable a 
     INNER JOIN 
    (
     SELECT [group], 
       AVG(Sal) sal2 
     FROM MyTable 
     GROUP BY [group] 
    ) b ON a.[group] = b.[group] 
      AND a.sal > b.sal2 
) YY 
ON YY.player = MyTable.player 
    AND YY.[group] = MyTable.[group] 
    WHEN MATCHED 
    THEN UPDATE SET 
        MyTable.sal = yy.sal2; 
0

試試這個@Amit Ben Zur

SELECT Ord.first_name, Ord.last_name,Ord.group_name, 
(SELECT round(avg(salary),2) 
FROM Players AS OrdDet 
WHERE Ord.group_name = OrdDet.group_name) AS MaxUnitPrice 
FROM Players AS Ord 
1

我仍然不知道您正在使用哪個DBMS。所以我只能猜測。以下是 SQL服務器的更新命令:

update p set salary=avgsal+100 -- enter your formula here 
from players p inner join 
    ( select group_name gname,round(avg(salary),2) as avgsal 
     from players 
     group by group_name 
    ) grped on gname=group_name 
where salary>avgsal; 

和MySQL的:

update players inner join 
    ( select group_name gname,round(avg(salary),2) as avgsal 
     from players 
     group by group_name 
    ) grped on gname=group_name 
set salary=avgsal+100 -- enter your formula here! 
where salary>avgsal; 

在我取代了同組的平均工資+100相關球員現在的工資上面的命令。這當然是您應該輸入自己配方的地方!