MySQL在CASE语句中计算的变量

时间:2019-11-23 13:42:20

标签: mysql

我对此很陌生,想在这里看看我做错了什么。这是代码:

application/json

我一直收到此错误消息-错误代码:1054。“字段列表”中的未知列“ coin_total”

我在这里做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

使用MySQL @variables,可以通过别名选择声明变量,然后将其设置为该计算值,但仍保存为最终列名,以内联方式进行。

SELECT 
      register_date, 
      day_total, 
      @myTotalCoins := (num_qtrs * .25) 
        + (num_dimes * .10) 
        + (num_nickles * .05) 
        + (num_pennies *.01) AS coin_total,
      CASE WHEN day_total = @myTotalCoins 
         THEN 'Yes' ELSE 'NO' END 'Match'
   FROM 
      Register,
      ( select @myTotalCoins := 0 ) sqlvars;

第二个别名必须是一个选择,但是将创建具有相应日期类型,数字,日期,字符串的“ @variable”。然后,当您在查询中将它们用作

@myTotalCoins := (computation)

它会在那一刻将该行的计算结果存储到该变量中,现在可以将其用于比较。您还可以使用此技术来生成汇总汇总,例如获取每位客户每天,每件事的运行总计。您可以在选择中定义任意数量的变量,它们将以相似的方式提供。

答案 1 :(得分:0)

这里实际上不需要变量。它们会使思维更复杂,并且可能会很慢。

您可以重复表达:

Entity1

FROM寄存器;

或者您可以包装查询:

SELECT 
    register_date, 
    day_total, 
    num_qtrs * .25 + num_dimes * .10 + num_nickles * .05 + num_pennies *.01 AS coin_total,
    CASE 
        WHEN day_total = num_qtrs * .25 + num_dimes * .10 + num_nickles * .05 + num_pennies *.01 
        THEN 'Yes' 
        ELSE 'NO' 
    END match

旁注:

  • 不要使用单引号声明标识符;单引号应仅用于字符串文字;如果您的idenfier包含特殊字符(此处不是这种情况),则可以改用反引号

  • 总和中的乘法运算不需要括号; MySQL知道算术运算中的优势