mysql - 使用连接设置用户定义的变量

标签 mysql user-defined

我有如下查询:

结果为@​​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

最佳答案

不要使用变量。只是:

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 ;

关于mysql - 使用连接设置用户定义的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10878855/

相关文章:

mysql - 查询变量 RMySQL

MySQL 重用变量输出 NULL

java 用户定义的数组(和用户定义的数组大小)返回 [null, null, null, ...]

mysql - 安装MySQL后恢复数据库

mysql - 从一个 MySQL 表中选择,即使 count 为 0 也返回 count(id)

mysql - 在 "INSERT ON"子句中使用用户变量

python 可重用的用户错误处理

mysql - 如何按日期时间 Cakephp 分组和排序?

mysql - 更新表之间的行