MYSQL Bucketing问题与我的查询

时间:2011-08-02 10:58:37

标签: mysql case buckets

我正试图在用户可定义的范围内提高费率。用户的输入是一组关于存储桶的简单指令,但我无法正确使用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 个答案:

答案 0 :(得分:2)

语法为CASE...WHEN...THEN...[ELSE]...END。你错过了END s。

此外,在您的查询结束时,它只是ELSE rate_amt,而不是ELSE THEN

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

答案 1 :(得分:1)

此外,它可能还不清楚,只有一个“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