2017-08-16 3 views
1

は、私は以下のようにテーブルがある - 今すでにMySQLで集約されたSQL出力によってグループ化された上の集約を実行

Employee - 
Employee_Id  Name  Limit_Amt 
1    Sachin  3000 
2    Mahi  2500 

Employee_Wage - 
Employee_Id  Amount  Pay_Date 
1    200   2017-01-01 
1    250   2017-02-01 
1    300   2017-03-01 
2    350   2017-01-01 
2    400   2017-02-01 
2    300   2017-03-01 

クエリ以下、個々の従業員のために残りの限界を調べるために正常に動作します -

SELECT e.Limit_Amt - SUM(Amount) AS 'Remaining Limit' 
FROM Employee e, Employee_Wage ew 
WHERE e.Employee_Id = ew.Employee_Id 
GROUP BY e.Employee_Id, e.Limit_Amt 

は、それが与えます -

Remaining Limit 
2250 
1450 

しかし、さらに残りの合計の合計を計算したいと思います(つまり、3700 )、私がSUM(e.Limit_Amt - SUM(Amount))を適用すると...それは動作していません。

概念的に私はブロックされています。誰かがここで私を案内してくれますか?前もって感謝します。

SELECT SUM(remaining) 
FROM (
     SELECT e.Limit_Amt - SUM(Amount) AS remaining 
     FROM Employee e 
     JOIN Employee_Wage ew 
     ON  e.Employee_Id = ew.Employee_Id 
     GROUP BY 
       e.Employee_Id 
     ,  e.Limit_Amt 
     ) sub 

from a join b on a.id = b.id構文がSQL92のfrom a, b where a.id = b.idよりも明確です:

答えて

1

あなたは、サブクエリを使用することができます。

+0

最後の行に追加します。 @Andomarは25年前に追加されたANSI標準である[明示的な結合の暗黙的な結合](https://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins)を置き換えています。同等の性能ですが、より明確でメンテナンス可能なコードです。 – Parfait

+0

お返事ありがとうございました。 –

0
select e.Name,e.Limit_Amt,sum(cast(w.Amount as int)) 'sum', 
e.Limit_Amt-sum(cast(w.Amount as int)) 'Remaining' 
from Employee e join Employee_Wage w 
on e.Employee_Id=w.Employee_Id 
group by e.Name,e.Limit_Amt 
+0

あなたはそのような合計を入れ子にすることはできないと思いますか? – Andomar

+0

コードは私のために働いています、あなた自身を試してみましたか? –

+0

は私が[テストする](http://rextester.com/NHB56232) – Andomar

関連する問題