2013-07-31 4 views
2

Я хотел бы извлечь все предложения клиентов от каждого проекта и, если у них есть несколько предложений, мне бы хотелось получить среднее значение.Передать переменную в подзапрос

У меня есть следующий запрос:

SELECT 
@projectid := projects.id AS projectid, 
(SELECT 
    SUM(`offers`) FROM 
    (SELECT AVG(`price`) AS `offers` 
    FROM `sales` 
    WHERE `sales`.`projectid` = @projectid 
    AND `sales`.`active` = 'yes' 
    GROUP BY `sales`.`clientid` 
) AS `average` 
) AS `outstanding` 
FROM projects 
WHERE 
projects.active = 'yes' 
ORDER BY outstanding ASC 

Моя проблема заключается в том, что @projectid является не передается в подзапрос, и я не понимаю, как я должен решить эту проблему.

Может кто-нибудь, пожалуйста, дать мне советы?

+0

Я не поливаю весь ваш запрос, но почему бы не просто использовать 'projects.id' в подзапросе вместо' @ переменной projectid'? –

+1

Поскольку это довольно сложный запрос, вы должны предоставить (тестовую) схему в http://sqlfiddle.com/ и четко показать в своем вопросе, каков ожидаемый результат запроса для схемы тестирования. –

+0

Я не знаю, связано ли это с подзапросом перед остальной частью запроса, но когда я пытаюсь использовать project.id, он возвращает только ** # 1054 - Неизвестный столбец 'project.id' в 'where clause' ** –

ответ

0

Помните, что SQL является декларативным языком, а не обязательным. Многие проблемы могут быть решены с помощью JOIN и подзапросов без «переменных». Итак, ...

... Я не очень-то понимаю, но вам просто нужно «для каждого проекта суммировать средние предложения от каждого клиента», что-то вроде этого будет делать трюк:

SELECT S.projectid, SUM(offers) FROM 
    (
    SELECT projectid, clientid, AVG(price) as offers FROM sales WHERE active = 'yes' 
    GROUP BY projectid, clientid 
) AS S 
JOIN projects on S.projectid = projects.id 
AND projects.active = "yes" 
GROUP BY projectid 

См http://sqlfiddle.com/#!2/19d0f/24

+0

Нет, я боюсь, что это не сработает, так как проекты не группируются в выходные данные. Я хочу только 1 строку за проект –

+0

Не могли бы вы на самом деле * показать * ожидаемый результат? –

+0

Я понял, может быть. Вы хотите «средние * общие * предложения для каждого проекта? –

Смежные вопросы