У меня есть три таблицы, которые мы представим, они называются продуктами, купонами и скидками. У меня есть запрос, который пытается получить список продуктов и выполняет подзапрос, чтобы найти ЛЮБЫЕ купоны с действительной скидкой.
Например, это показывает, что я пытаюсь:
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.
Есть предложения?