MYSQL Bucketing проблема с моим запросом - PullRequest
1 голос
/ 02 августа 2011

Я пытаюсь увеличить ставки в определяемом пользователем диапазоне.Вводимые пользователем данные представляют собой простой набор инструкций о сегментах, но я не могу правильно понять SQL.

Вот что у меня есть

SELECT r.*,CASE
WHEN rate_amt < 0.25 THEN (rate_amt + 0.5) as rate_amt
WHEN (rate_amt >= 0.25 AND rate_amt < 0.5) THEN (rate_amt + 0.25) as rate_amt
WHEN (rate_amt >=0.5 AND rate_amt < 0.75) THEN (rate_amt + 0.01) as rate_amt
WHEN ELSE THEN (rate_amt) as rate_amt FROM (sc_module_rates r) 

Запуск этого SQL вызывает ошибку

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as rate_amt
WHEN (rate_amt >= 0.25 AND rate_amt < 0.5) THEN (0.25) as rate_amt
W' at line 2

Таблица выглядит следующим образом:

+-------------------+
| rate   | rate_amt |
---------------------
| fiji   | 0.04     | 
| somoa  | 0.76     | 
| japan  | 0.51     | 
| china  | 0.25     | 

Мне нужен вывод, чтобы в основном добавить определяемую пользователем маржу к этим ставкам (число, как показано в запросе)

Может кто-нибудь сказать мне, что я делаю не так?Я несколько раз пытался изменить предложение WHEN, например:

AND(rate_amt >=0.5 , rate_amt < 0.75)
(rate_amt >=0.5 <0.75)
(rate_amt BETWEEN 0.5 and 0.75)

Все безуспешно и с тем же сообщением об ошибке.

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Синтаксис CASE...WHEN...THEN...[ELSE]...END.Вам не хватает END с.

Кроме того, в конце вашего запроса это просто ELSE rate_amt, а не ELSE THEN.

http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

1 голос
/ 02 августа 2011

Кроме того, и это может быть не совсем понятно, есть только один «AS ResultColumn» только в самом КОНЦЕ вашего предложения CASE / WHEN / END

SELECT r.*,
     rate_amt + CASE WHEN rate_amt < 0.25 THEN 0.5
                     WHEN rate_amt >= 0.25 AND rate_amt < 0.5 THEN 0.25
                     WHEN rate_amt >=0.5 AND rate_amt < 0.75 THEN 0.01
                     ELSE 0.00
                END as rate_amt
...