1

我有一个如下查询:

结果给出@sold_count:=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
4

1 回答 1

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 ;
于 2012-06-04T09:21:05.303 回答