Question

I have a query like below:

Result gives @sold_count:=SUM(I.quantity) = 10, but @sold_count = 0,

so calculations are all 0.

What should be wrong here?

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
Was it helpful?

Solution

Don't use variables. Just:

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 ;

You could also make the query a nested one, if you don't like using SUM(quantity) many times:

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 ;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top