2016-04-07 19 views
1

私はいくつかの比較でいくつか問題があります。 私は3つのテーブルを持っている:私は、彼らができるより多くのお金を費やしているすべてのプロジェクトを取得する必要がありOracle - sum()と数値の比較

Table 1 Project 
Id - Budget 

Table 2 Member 
Id - Category - Hours 

Table 3 Costs 
Category - Salary/hour 

。お金を得るために、私は合計()を使用過ごしたが、それは私にinvald識別子エラー

select p.id, sum(m.hours*c.salary)as spent, max(p.budget) from member m 
join project p on p.id=m.id 
join costs c on m.category=c.category 
where spent>max(p.budget) 
group by p.id; 

私は似た何かを見つけることができませんし、私はそれらの2つの列を比較する方法がわからないを提供します。 お時間をいただきありがとうございます。

答えて

1

where句にspentエイリアスを使用することはできません。列エイリアスは、サブクエリを使用しない限り、order-by句でのみ有効です。あなたもないwhereで、having句に確認する必要があります。

select p.id, sum(m.hours*c.salary) as spent, max(p.budget) 
from member m 
join project p on p.id=m.id 
join costs c on m.category=c.category 
group by p.id 
having sum(m.hours*c.salary) > max(p.budget); 

それとも、それを繰り返したいインライン・ビューを使用しない場合:

select id, spent, budget 
from (
    select p.id, sum(m.hours*c.salary) as spent, max(p.budget) as budget 
    from member m 
    join project p on p.id=m.id 
    join costs c on m.category=c.category 
    group by p.id 
) 
where spent > budget; 

あなたが本当にしないでくださいp.idはとにかくユニークであるならば、あなたはグループ・バイ節の代わりにということを含めることができ、予算のためにmax()集計が必要になります。

select id, spent, budget 
from (
    select p.id, sum(m.hours*c.salary) as spent, budget 
    from member m 
    join project p on p.id=m.id 
    join costs c on m.category=c.category 
    group by p.id, p.budget 
) 
where spent > budget; 
+0

どうもありがとう!それは完全に働いた:) –