2017-03-14 13 views
1

casegroup byというステートメントでテーブルを更新したいとします。group by + caseステートメント

私は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 

ありがとうございます!

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

このシナリオの内部結合を使用 –

+0

サンプルテーブルのデータと期待される結果、および書式付きテキストを追加します。 – jarlh

+0

これらの行の値をどのように更新しますか? –

答えて

0

利用GROUP 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 
0

このSQLは、それぞれのプレーヤーを検索し、グループの平均給与と彼の給料を更新します:JOINステートメントでORDER BY句

0

この@Amitを試してみてください - は:

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 
1

私はまだ使用しているDBMSを知りません。したがって私は推測することができます。

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のための:私はグループの平均給与100との関連プレイヤーの現在の給与を交換し、上記のコマンドで

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; 

ここで更新 SQLサーバのためのコマンドです。これはもちろん、自分の数式を入力する場所です!