2016-08-11 3 views
1

У меня есть 2 запроса, но я смущен, где добавить предложение where.MySQL: - Добавление предложения where к этому запросу

select supplier_id,count(*) c, party_name, SUM(po_value) po_value 
from purchase_order join supplier s on s.id=supplier_id 
group by supplier_id 
having c>1 ORDER BY c DESC LIMIT 5 

Второй запрос

select warehouse_id, warehouse_name, SUM(available_quantity) available_quantity 
from stock join warehouse s on s.id=warehouse_id 
group by warehouse_id 

В обоих запросах, наконец, я должен выборки основан на ид как where org_id='152'

+1

Перед группой. – jarlh

+1

Общее правило GROUP BY гласит: Если задано предложение GROUP BY, каждая ссылка столбца в списке SELECT должна либо идентифицировать столбец группировки, либо быть аргументом функции набора. (Т. Е. Ваша группа недействительна. Не будет выполняться в более новых версиях MySQL.) – jarlh

+0

@jarlh Я попытался, и я потерпел неудачу, так что я отправил его :( – Ranjan

ответ

1

Смотрите отредактированный запрос ниже:

select supplier_id,count(*) c, party_name, SUM(po_value) po_value 
from purchase_order join supplier s on s.id=supplier_id 

    WHERE purchase_order.org_id='152 

group by supplier_id 
having c>1 ORDER BY c DESC LIMIT 5 

сравнения против org_id в purchase_order использовать s.org_id i f вы хотите сделать поиск в другой таблице.

Для второго

select warehouse_id, warehouse_name, SUM(available_quantity) available_quantity 
from stock join warehouse s on s.id=warehouse_id 

    WHERE org_id='152 


group by warehouse_id 

(обратите внимание, что пробелы сворачиваемая). Для более полной информации смотрите в руководстве раздел выберите: http://dev.mysql.com/doc/refman/5.7/en/select.html

+0

получение ошибки, например прежде чем я попытался Код ошибки: 1052. Столбец «org_id» в where, где предложение неоднозначно - – Ranjan

+0

Вы не упомянули, что у вас одинаковый столбец в обеих таблицах. С какой таблицы вы хотите проверить условие? – e4c5

+0

Да, Я архивирую это? – Ranjan

2

Добавить это как раз перед GROUP BY:

SELECT supplier_id,count(*) c, party_name, SUM(po_value) po_value 
    FROM purchase_order A JOIN supplier s ON s.id=supplier_id 
    GROUP BY supplier_id 
    WHERE A.org_id='152' 
    HAVING c>1 ORDER BY c DESC LIMIT 5 

и

SELECT warehouse_id, warehouse_name, SUM(available_quantity) available_quantity 
    FROM stock G JOIN warehouse s ON s.id=warehouse_id 
    WHERE G.org_id='152' 
    GROUP BY warehouse_id 

Кроме того, с точки зрения читаемости, я бы рекомендовал использовать капители чтобы отметить стандартные термины SQL :)

Вопрос, на который вы попросили, также очень хорошо ответил в первом примере на этой странице:

http://www.w3schools.com/sql/sql_groupby.asp

EDIT: обновление, чтобы удалить двусмысленность о том, где положение.

+0

Я пробовал, как и все те же исключения Код ошибки: 1052. Столбец 'org_id' в том, где предложение неоднозначно – Ranjan

+0

Это потому, что у вас есть одинаковый столбец в обеих таблицах. Я редактировал мой код, чтобы надеяться удалить неоднозначность, но предположил, что вы хотите отфильтровать его по столбцу «org_id» в таблице FROM. –

+0

Да, как я мог архивировать это? – Ranjan