2011-10-17 118 views
2
SELECT 
if('1000'>plan_limit_max,'1000'-plan_limit_max,0) as 'Overage', 
if(`per_hour_cost`='0', `per_period_cost`+'10'*`Overage`, per_hour_cost*720) AS 'Total' 

FROM `service_price` 

order by Total asc 
; 

有一个在3号线MySQL查询选择和计算值

Error Code: 1054. Unknown column 'Overage' in 'field list' 

Overage错误时有没有办法做我想做一个查询? 我想按总价订购结果,但要计算它,我必须计算使用量超出限制。

我知道应该有其他方法来做到这一点,使用多个查询,创建视图等。 我只是想知道是否有一个更简单的查询。

+0

你能后的错误呢? – jefflunt

+1

为什么你单引号看起来像数字常量(例如,“1000”)? – pilcrow

回答

1

你可以计算Overage一次,在一个子查询:

SELECT Overage, 
     IF(per_hour_cost = 0, per_period_cost + 10 * Overage, per_hour_cost * 720) 
     AS Total 
    FROM (SELECT IF(1000 > plan_limit_max, 1000 - plan_limit_max, 0) AS Overage, 
       service_price.* 
      FROM service_price) d; 
1

超额未定义为查询的一部分,仅作为结果中的列标题。您不能引用该列,因为它还不存在......你一定要使用类似下面的SQL:

SELECT 
if('1000'>plan_limit_max,'1000'-plan_limit_max,0) as 'Overage', 
if(`per_hour_cost`='0', `per_period_cost`+'10'*if('1000'>plan_limit_max,'1000'-    plan_limit_max,0), 
per_hour_cost*720) AS 'Total' 

FROM `service_price` 

order by Total asc 
0

您有一个错误在超龄把“``”。你必须在OVERAGE中使用''。

SELECT 
if('1000'>plan_limit_max,'1000'-plan_limit_max,0) as 'Overage', 
if(`per_hour_cost`='0', `per_period_cost`+'10'* 'Overage', per_hour_cost*720) AS 'Total' 

FROM `service_price` 

order by Total asc 
; 
+0

不,这会强制令牌“超额”的字符串解释。 MySQL会立即将它截断为零,并将发出如下警告:'截断不正确的DOUBLE值:'Overage'' – pilcrow

+1

我错了。您的解释是正确的。 –