在连接查询中的select语句中使用别名

时间:2013-12-05 17:42:59

标签: oracle

我非常擅长使用Oracle(现在在课堂上)。我遇到了我正在尝试运行的查询的问题。我在这个网站上研究了很多其他答案,但似乎没有一个直接适用于我的问题所以解决方案无效。

我需要找到每个员工在午餐上花费的总金额。

在结果中显示first_name,last_name,credit_limit和total_price_spent。

按total_price_spent降序排列答案。仅显示花费超过信用额度的员工。

我想出了除了showing only the employees who spent more than their credit limit之外的所有事情。我试着在最后使用select语句,但发现我不能在select语句中使用别名,所以我真的不知道从哪里开始。任何帮助,将不胜感激。这是我到目前为止所做的。

select a.first_name, a.last_name, credit_limit, sum(c.quantity * d.price) as total_price_spent
from l_employees a join l_lunches b on a.employee_id = b.employee_id join l_lunch_items c on b.lunch_id = c.lunch_id join l_foods d on c.supplier_id = d.supplier_id and c.product_code = d.product_code
group by a.first_name, a.last_name, a.credit_limit
order by total_price_spent desc;

2 个答案:

答案 0 :(得分:2)

正如迈克所说:添加HAVING

select a.first_name, a.last_name, credit_limit, sum(c.quantity * d.price) as total_price_spent
from l_employees a join l_lunches b on a.employee_id = b.employee_id join l_lunch_items c on b.lunch_id = c.lunch_id join l_foods d on c.supplier_id = d.supplier_id and c.product_code = d.product_code
group by a.first_name, a.last_name, a.credit_limit
having sum(c.quantity * d.price) > credit_limit
order by total_price_spent desc;

答案 1 :(得分:1)

我认为你所寻找的是一个HAVING条款。它就像一个WHERE,但在你使用group by时使用。你想把它放在group by和order by之间。像'总共有>之类的东西a.credit_limit'应该有效。如果使用别名'total'不起作用(没有测试过),你可能不得不在HAVING子句中再次'sum(c.quantity * d.price)'而不是使用total,所以HAVING sum( c.quantity * d.price)> a.credit_limit。