Oracle - 将sum()与数值进行比较

时间:2016-04-07 16:55:35

标签: sql oracle sum

我在进行一些比较时遇到了一些麻烦。 我有3张桌子:

Table 1 Project
Id - Budget

Table 2 Member
Id - Category - Hours 

Table 3 Costs
Category - Salary/hour

我需要让所有项目花费更多的钱。为了花钱,我使用了sum(),但它给了我一个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; 

我找不到类似的东西,我不知道如何比较这两列。 谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

您无法在taskX.finalizedBy taskY 子句中使用spent别名;列别名仅在order-by子句中有效,除非您使用子查询。您还应该使用where条款进行检查,而不是having

where

或者如果您不想重复它,请使用内嵌视图:

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; 汇总,如果max()无论如何都是唯一的,您可以在group-by子句中包含它:

p.id