2011-10-17 3 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 
; 

Il y a une erreur avec Overage à la ligne 3requête MySQL et sélectionnez Compute valeur

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

est-il un moyen de faire ce que je veux avec une requête? Je veux commander les résultats par prix total, mais pour le calculer, je dois calculer l'utilisation dépasse la limite.

Je sais qu'il devrait y avoir d'autres façons de le faire, utiliser plus d'une requête, créer des vues, etc. Je me demande simplement s'il existe une requête plus simple pour cela.

+0

Pouvez-vous poster l'erreur aussi bien? – jefflunt

+1

Pourquoi faites-vous des guillemets simples qui ressemblent à des constantes numériques (par exemple, «1000»)? – pilcrow

Répondre

1

Vous pouvez calculer Overage une fois, dans une sous-requête:

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

Le dépassement n'est pas défini comme faisant partie de la requête, mais uniquement comme en-tête de colonne dans le résultat. Vous ne pouvez pas faire référence à cette colonne car il n'existe pas encore ... Vous devez utiliser quelque chose comme le SQL ci-dessous:

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

Vous avez une erreur de mettre « ` ` » dans SOUSCLASSÉ. Vous devez utiliser '' dans 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

Non, cela va forcer l'interprétation de la chaîne du «jeton Overage». MySQL tronquera sommairement cela à zéro et émettra un avertissement quelque chose comme: 'Valeur DOUBLE incorrecte tronquée: 'Overage'' – pilcrow

+1

Je me trompe.Votre explication est correcte. –

Questions connexes