yury-gubsky
@yury-gubsky
Программист

Как составить запрос Mysql с группировкой и суммами ячеек в выражении WHERE?

Подскажите пожалуйста как правильно составить запрос Mysql, я не силен в составных запросах.

У меня есть запрос
SELECT `products`.`name`          AS `name`,
       SUM(`part`.`rest`)         AS `rest`, -- остаток
       SUM(`part`.`reserve`)      AS `reserve`, -- резерв
       `part`.`revision_actually` AS `rev_actually`, -- актуальный остаток (в админке менеджеры указывают)
       `part`.`code`              AS `code`, -- код товара
       `part`.`point_id`          AS `point_id` -- точка (магазин) к которой привязана партия
FROM `products` -- товары
INNER JOIN `part` -- партии
ON `products`.`id` = `part`.`prod_id`
WHERE `part`.`point_id` IN(1,2) AND (`part`.`rest` + `part`.`reserve`) != `part`.`revision_actually`
GROUP BY `part`.`code`, `part`.`point_id`
ORDER BY `part`.`code` ASC

Вот этот запрос у меня работает, но не считает сумму остатка и резервка всех партий.

У меня есть таблица товаров "products" и таблица партий "part" привязанных к этим товарам по "prod_id"
У товара может быть любое количество партий.
Партии могут отличаться поставщиком, ценами, и другими атрибутами.

Цель: Получить все партии, сгруппированные по коду и по точке продаж, но выбрать только партии у которых:
сумма остатка + сумма остатка в резерве не равна(!=) актуальному остатку

Пример запроса который по идее должен получиться, но у меня не работает если я в условие WHERE подставляю агрегатную функцию SUM, (ошибка №1111)
SELECT `products`.`name`          AS `name`,
       SUM(`part`.`rest`)         AS `rest`, -- остаток
       SUM(`part`.`reserve`)      AS `reserve`, -- резерв
       `part`.`revision_actually` AS `rev_actually`, -- актуальный остаток (в админке менеджеры указывают)
       `part`.`code`              AS `code`, -- код товара
       `part`.`point_id`          AS `point_id` -- точка (магазин) к которой привязана партия
FROM `products` -- товары
INNER JOIN `part` -- партии
ON `products`.`id` = `part`.`prod_id`
WHERE `part`.`point_id` IN(1,2) AND (SUM(`part`.`rest`) + SUM(`part`.`reserve`)) != `part`.`revision_actually`
GROUP BY `part`.`code`, `part`.`point_id`
ORDER BY `part`.`code` ASC


Прошу помощи магов по сложным запросам!
  • Вопрос задан
  • 195 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Ivashka69
Эх ты шнурок, ладно не благодари google.com
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы