2012-06-04 9 views
1

는 I 쿼리 아래와 같이이 결합 SUM (I.quantity) = 10 =하지만 @sold_count = 0 설정 사용자 정의 변수

그렇게 계산이 모두 0 인 .

무엇이 잘못 되었나요?

SET @sold_count :=0; 
SELECT 
@sold_count:=SUM(I.quantity), 
@sold_count,I.from_widget,COUNT(from_widget) as order_count, 
(@sold_count * buy_price) as ciro, 
(@sold_count * list_price) as liste_ciro, 
(@sold_count * widget_price) as vitrin_ciro, 
P.* 
FROM 
tbl_products P 
LEFT JOIN tbl_order_items I on I.product_id = P.id 
WHERE 
P.publish_date BETWEEN DATE_SUB(CURDATE() ,INTERVAL 3 MONTH) AND DATE_SUB(CURDATE( ) ,INTERVAL 0 MONTH) 
GROUP BY I.from_widget,I.product_id 
ORDER BY publish_date DESC 
+0

왜 당신이 변수를 필요로 생각을? –

답변

2

변수를 사용하지 마십시오. 그냥 :

SELECT 
    SUM(I.quantity), 
    I.from_widget, 
    COUNT(from_widget)    AS order_count, 
    SUM(I.quantity) * buy_price AS ciro, 
    SUM(I.quantity) * list_price AS liste_ciro, 
    SUM(I.quantity) * widget_price AS vitrin_ciro, 
    P.* 
FROM 
    tbl_products P 
    LEFT JOIN tbl_order_items I 
     ON I.product_id = P.id 
WHERE 
P.publish_date BETWEEN DATE_SUB(CURDATE() , INTERVAL 3 MONTH) 
        AND DATE_SUB(CURDATE() , INTERVAL 0 MONTH) 
GROUP BY I.from_widget, 
     I.product_id 
ORDER BY publish_date DESC ; 

당신이 SUM(quantity) 여러 번 사용하여 마음에 들지 않는 경우는, 쿼리 중첩 된 하나 만들 수 :

SELECT 
    sum_quantity * buy_price AS ciro, 
    sum_quantity * list_price AS liste_ciro, 
    sum_quantity * widget_price AS vitrin_ciro, 
    tmp.* 
FROM 
    (SELECT 
     SUM(I.quantity)    AS sum_quantity, 
     I.from_widget, 
     COUNT(from_widget)    AS order_count, 
     buy_price, 
     list_price, 
     widget_price, 
     P.* 
    FROM 
     tbl_products P 
     LEFT JOIN tbl_order_items I 
      ON I.product_id = P.id 
    WHERE 
    P.publish_date BETWEEN DATE_SUB(CURDATE() , INTERVAL 3 MONTH) 
         AND DATE_SUB(CURDATE() , INTERVAL 0 MONTH) 
    GROUP BY I.from_widget, 
      I.product_id 
) AS tmp 
ORDER BY publish_date DESC ; 
+0

나는 그것을 생각했다. 거기에 4 번 SUM()이 있습니다. 성능 문제가 아닌가요? –

+0

나는 그렇게 생각하지 않는다. –