4

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

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...+rank 5 的动态字段。所以,我添加了另一个字段,例如

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。

我怎样才能解决这个问题?

谢谢!

4

4 回答 4

2

您不能在同一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
于 2013-10-28T08:04:56.713 回答
2

在 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`

这很丑陋,但它有效。

于 2013-10-28T08:26:39.767 回答
1

你必须有办法。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 * ( CVaR 95+0.51612 )/(0.53212)) ..etc..

于 2013-10-28T08:06:29.163 回答
0

尝试子查询,例如:

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
于 2013-10-28T08:08:26.057 回答