2016-06-14 1 views
0

두 가지 하위 쿼리를 사용하지 않고이 간단한 작업을 수행 할 수있는 방법이 있습니까?MySQL GROUP BY 필드가 일치하지 않음

이 내 기본 데이터입니다 :

SELECT order_detail_id, product_id, MAX(paid_price) AS max_price, order_id 
FROM t_order_details 
WHERE order_id = 7 OR order_id = 8 
GROUP BY order_id 

simple select result

내가 order_detail_id 선택하고 데이터가하지 않는 것 같다 위해 8의 순서 7과 같은 일에, 최대 가격 PRODUCT_ID합니다 일치하는 행

SELECT order_detail_id, product_id, MAX(paid_price) AS max_price, order_id 
FROM t_order_details 
WHERE order_id = 7 OR order_id = 8 
GROUP BY order_id 

wrong result

이것은 두 개의 하위 쿼리가 포함 된 솔루션입니다.

SELECT order_detail_id, product_id, paid_price, order_id 
FROM t_order_details 
WHERE paid_price IN (
    SELECT MAX(paid_price) AS max_price 
    FROM t_order_details 
    WHERE order_id = 7 OR order_id = 8 
    GROUP BY order_id) 
AND order_id IN (
    SELECT order_id 
    FROM t_order_details 
    WHERE order_id = 7 OR order_id = 8 
    GROUP BY order_id) 
GROUP BY order_id 

하지만

답변

0

다음 시도이 작업을 수행하는 자연적인 방법이 있어야한다고 생각합니다 (;) 부질 없음)

SELECT T1.order_detail_id, T1.product_id, T1.paid_price, T1.order_id 
FROM t_order_details T1 
INNER JOIN (
    SELECT MAX(paid_price) AS paid_price, order_id 
    FROM t_order_details 
    WHERE order_id IN (7, 8) 
    GROUP BY order_id 
) T2 ON T1.order_id = T2.order_id AND T1.paid_price = T2.paid_price 
WHERE T1.order_id IN (7, 8) 

편집 :

SELECT T1.order_detail_id, T1.product_id, T1.paid_price, T1.order_id 
FROM t_order_details T1 
INNER JOIN t_order_details T2 
ON T1.order_id = T2.order_id AND T1.paid_price <= T2.paid_price 
WHERE T1.order_id IN (7, 8) 
GROUP BY T1.order_id, T1.order_detail_id, T1.product_id 
HAVING COUNT(*) <= 1 
+0

작품! 이것은 내 것보다 낫다. 하지만 하위 쿼리없이 수행 할 수 있기를 바랍니다. 매우 일반적인 문제이기 때문에 –

+0

@AndreyKudriavtsev ** 편집 된 ** 부분 검사가 작동하는지 여부를 확인하십시오. – Blank