我在进行一些比较时遇到了一些麻烦。 我有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;
我找不到类似的东西,我不知道如何比较这两列。 谢谢你的时间。
答案 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