Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询中动态生成字段的总和_Mysql_Sql - Fatal编程技术网

MySQL查询中动态生成字段的总和

MySQL查询中动态生成字段的总和,mysql,sql,Mysql,Sql,这是我对动态计算字段的查询: SELECT 5 * (`Mean (all)` +0.01735568 )/(0.07268901) AS rank1, 5 * (`CVaR 95` +0.51612 )/(0.53212) AS rank2, 5 * (`Hurst` - 0.2 )/(0.7717653) AS rank3, 5 * (`MaxDD` +6.200000762939453 )/(16.200000762939) AS rank4, 5 * (`Positive % 1

这是我对动态计算字段的查询:

SELECT 5 * (`Mean (all)` +0.01735568 )/(0.07268901) AS rank1, 
5 * (`CVaR 95` +0.51612 )/(0.53212) AS rank2, 
5 * (`Hurst` - 0.2 )/(0.7717653) AS rank3, 
5 * (`MaxDD` +6.200000762939453 )/(16.200000762939) AS rank4, 
5 * (`Positive % 12` - 0.3 )/(1) AS rank5
FROM `quant1`
它工作得很好,但我需要添加另一个动态字段,它等于rank1+rank2…+rank5。因此,我添加了另一个字段,如

SELECT 5 * (`Mean (all)` +0.01735568 )/(0.07268901) AS rank1, 
5 * (`CVaR 95` +0.51612 )/(0.53212) AS rank2, 
5 * (`Hurst` - 0.2 )/(0.7717653) AS rank3, 
5 * (`MaxDD` +6.200000762939453 )/(16.200000762939) AS rank4, 
5 * (`Positive % 12` - 0.3 )/(1) AS rank5,
rank1+rank2+rank3+rank4+rank5 AS rank
FROM `quant1`
它生成一个错误“未知列rank1”。有趣的是,完全相同的查询在MS Access中运行良好

我怎样才能解决这个问题


谢谢

不能在同一
SELECT
语句中使用别名,请将其放在子查询中,如下所示:

SELECT rank1, rank2, rank3, rank4, rank5,
  rank1 + rank2 + rank3 + rank4 + rank5 AS rank
FROM
(

    SELECT 5 * (`Mean (all)` +0.01735568 )/(0.07268901) AS rank1, 
    5 * (`CVaR 95` +0.51612 )/(0.53212) AS rank2, 
    5 * (`Hurst` - 0.2 )/(0.7717653) AS rank3, 
    5 * (`MaxDD` +6.200000762939453 )/(16.200000762939) AS rank4, 
    5 * (`Positive % 12` - 0.3 )/(1) AS rank5
    FROM `quant1`
) AS t
你必须有办法。 1.将这些查询用作子查询:

select R.*,R.rank1+R.rank2+R.rank3+R.rank4+R.rank5 AS rank from (
SELECT 5 * (`Mean (all)` +0.01735568 )/(0.07268901) AS rank1, 
5 * (`CVaR 95` +0.51612 )/(0.53212) AS rank2, 
5 * (`Hurst` - 0.2 )/(0.7717653) AS rank3, 
5 * (`MaxDD` +6.200000762939453 )/(16.200000762939) AS rank4, 
5 * (`Positive % 12` - 0.3 )/(1) AS rank5
FROM `quant1`
) as R
或 2. 在查询中,请替换: rank1+rank2+rank3+rank4+rank5 使用(5*(
Mean(all)
+0.01735568)/(0.07268901))+(5*(
cvar95
+0.51612)/(0.53212))等尝试子查询,如:

SELECT *, rank1+rank2+rank3+rank4+rank5 AS rank 
FROM (   
  SELECT 5 * (`Mean (all)` +0.01735568 )/(0.07268901) AS rank1, 
  5 * (`CVaR 95` +0.51612 )/(0.53212) AS rank2, 
  5 * (`Hurst` - 0.2 )/(0.7717653) AS rank3, 
  5 * (`MaxDD` +6.200000762939453 )/(16.200000762939) AS rank4, 
  5 * (`Positive % 12` - 0.3 )/(1) AS rank5,
  FROM `quant1`
)  QuantRank

在MySQL中,您不能引用其他别名,但可以在select中定义变量,因此请尝试以下方法:

SELECT
   @rank1 := 5 * (`Mean (all)` +0.01735568 )/(0.07268901) AS rank1, 
   @rank2 := 5 * (`CVaR 95` +0.51612 )/(0.53212) AS rank2, 
   @rank3 := 5 * (`Hurst` - 0.2 )/(0.7717653) AS rank3, 
   @rank4 := 5 * (`MaxDD` +6.200000762939453 )/(16.200000762939) AS rank4, 
   @rank5 := 5 * (`Positive % 12` - 0.3 )/(1) AS rank5,
   @rank1 + @rank2 + @rank3 + @rank4 + @rank5 AS rank
FROM `quant1`

这很难看,但很管用。

就我个人而言,我不推荐选项2——它们会很快失去同步。使用子查询可能是唯一的方法。选项1生成一个错误:“错误代码:1248每个派生表都必须有自己的别名”。你需要在末尾加上“AS someTable”它可以工作。。。10000行的执行时间为0.062秒,比下面Mats Kindahl的解决方案略差。请注意,子查询在历史上对优化器并不好。它在最新的MySQL版本中有所改进,但它确实推动了优化器的发展。