MySQL запрос выбора и вычисления значения - PullRequest
2 голосов
/ 17 октября 2011
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
;

Ошибка в Overage в строке 3

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

Есть ли способ сделать то, что я хочу, одним запросом? Я хочу упорядочить результаты по общей цене, но чтобы рассчитать их, мне нужно рассчитать, что использование превышает лимит.

Я знаю, что должны быть другие способы сделать это, использовать более одного запроса, создавать представления и т. Д. Мне просто интересно, есть ли более простой запрос для этого.

Ответы [ 3 ]

1 голос
/ 17 октября 2011

Вы можете вычислить 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 голос
/ 17 октября 2011

Избыток не определен как часть запроса, только как заголовок столбца в результате. Вы не можете ссылаться на этот столбец, так как он еще не существует ... Вы должны использовать что-то вроде 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 голосов
/ 17 октября 2011

У вас ошибка при вводе "` `" в 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
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...