2013-12-05 3 views
1

Я очень новичок в использовании Oracle (теперь в классе). У меня проблема с запросом, который я пытаюсь запустить. Я изучил много других ответов на этом сайте, и ни один из них, похоже, не применим непосредственно к моей проблеме, поэтому решения не работают.Использование псевдонима в выражении select в запросе соединения

Мне нужно найти общую сумму, потраченную на обеды каждым сотрудником.

Показывать 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; 
+0

Пожалуйста, покажите ваши структуры таблицы – OldProgrammer

ответ

1

Я думаю, что вы ищете предложение HAVING. Это как WHERE, но используется, когда вы используете группу. Вы хотите бросить его между группой и заказом. Что-то вроде «HAVING total> a.credit_limit» должно работать. Если использование псевдонима «total» не работает (не проверял это), вам может потребоваться «sum (c.quantity * d.price)» снова в предложении HAVING вместо использования total, поэтому HAVING sum (c.quantity * d.price)> a.credit_limit.

+0

Это сработало! Огромное спасибо. – user3071378

+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; 
Смежные вопросы