У меня есть три таблицы, которые мы будем притворяться, называются продуктами, купонами и скидками. У меня есть запрос, который пытается вывести список продуктов и запускает подзапрос, чтобы найти ЛЮБЫЕ купоны, которые имеют действующую скидку.Максимальное значение MySQL из подзапроса и группы по задаче
Например, это показывает, что я пытаюсь:
SELECT products.id, products.name,
(
SELECT MAX(discounts.amount) FROM discounts
WHERE discounts.coupon_id = coupons.id
LIMIT 1
) as discount
FROM products
LEFT JOIN coupons ON products.id = coupons.product_id
GROUP BY products.id
Моя проблема заключается в том, что мой GROUP BY необходимо для многих других причин. Но если для каждого продукта есть несколько купонов, «скидка» объединяется в странные способы, когда происходит группировка.
Скажем, для одного продукта есть три купона - два без скидки и один со скидкой 33%. Когда возникает группа, я хочу выбрать наивысшее значение, но по умолчанию MySQL возвращает значение как 0.
Используя MAX, подзапрос, очевидно, возвращает максимальное значение скидок для каждого индивидуального купона. Мне просто нужно сказать GROUP BY, чтобы использовать максимальное значение.
Я мог бы легко использовать GROUP_CONCAT, чтобы вернуть строку из всех них, но мне также нужно использовать это значение в расчете в некоторых условиях HAVING.
Любые предложения?
К сожалению, это не так просто. Я бы использовал соединения, но на самом деле есть четыре подзапроса - каждый из них проверяет различные типы возможных скидок. Мне казалось невозможным структурировать соединения таким образом, чтобы не требовать, чтобы каждый продукт имел все четыре соединения. Подзапросы облегчают/облегчают это условие. Думаю, я буду играть с ними больше. – helion3