GROUP BY와 함께 사용되는 MySQL MIN()에서 발생하는 문제에 대한보다 우아한 해결책을 찾고 있습니다. 나는 각 금속의 그룹에서 가장 저렴한 금속을 선택하고자하는SQL MIN() & GROUP BY
- 제품 (ID, GROUP_ID)
- product_attributes (PRODUCT_ID,은 attribute_id, 값)
:
나는 두 개의 테이블이 (attribute_id = 40) 특정 제품 그룹에서.
다음 쿼리는 작동하지만 훨씬 더 잘 작성되었을 수 있습니다.
SELECT metal.product_id, metal.value AS `metal`, `price`.value AS `price`
FROM
product_attributes metal
INNER JOIN
(
SELECT metal.value AS `metal`, MIN(price.value) AS `price`
FROM
product_attributes metal
LEFT JOIN
product_attributes price
ON metal.product_id = price.product_id
INNER JOIN products p
ON p.id = metal.product_id
WHERE
metal.attribute_id = 40 AND
price.attribute_id = 37 AND
p.group_id = 1
GROUP BY
metal.value
ORDER BY metal ASC, price DESC
) AS d ON
d.metal = metal.value
LEFT JOIN
product_attributes price ON
metal.product_id = price.product_id AND price.attribute_id = 37
INNER JOIN
products p ON
p.id = metal.product_id
WHERE
metal.attribute_id = 40
AND d.price = price.value
AND p.group_id = 1
GROUP BY
metal.value
ORDER BY
metal.value ASC,
price.value DESC;