我试图在Mysql中使用CASE语句,虽然MySQL不会抱怨我的查询,但它无法提供正确的结果。为什么MySQL Switch-Case没有选择正确的值?
什么我试图做的是等价的:
if value < 20 then 1
elseif value < 30 then 2
elseif value < 40 then 3
.
.
.
else value < 90 then 45
,这是我的MySQL声明:
SELECT
UM.DA,
UM.PA,
IF((UM.DA - UM.PA) > 25, UM.DA, UM.PA) AS "PS",
CASE
WHEN "PS" < 20 THEN 1
WHEN "PS" < 30 THEN 2
WHEN "PS" < 40 THEN 3
WHEN "PS" < 50 THEN 5
WHEN "PS" < 60 THEN 8
WHEN "PS" < 70 THEN 12
WHEN "PS" < 80 THEN 20
WHEN "PS" < 90 THEN 30
WHEN "PS" >= 90 THEN 45
END AS "Points",
FROM
Table1 UM
,这是我的结果集:
+-------+-------+--------+--------+
| UM.DA | UM.PA | PS | Points |
+-------+-------+--------+--------+
| 19.21 | 18.39 | 18.39 | 1 |
+-------+-------+--------+--------+
| 24.80 | 34.91 | 34.91 | 1 |
+-------+-------+--------+--------+
| 29.72 | 35.89 | 35.89 | 1 |
+-------+-------+--------+--------+
这就是我的结果应该如何:
+-------+-------+--------+--------+
| UM.DA | UM.PA | PS | Points |
+-------+-------+--------+--------+
| 19.21 | 18.39 | 18.39 | 1 |
+-------+-------+--------+--------+
| 24.80 | 34.91 | 34.91 | 3 |
+-------+-------+--------+--------+
| 29.72 | 35.89 | 35.89 | 3 |
+-------+-------+--------+--------+
那么,什么是在MySQL查询中使用“CASE”(这是一个查询,而不是存储过程)
另外,在性能方面是它更好地把这种逻辑在SQL的正确方法查询,还是应该用我选择的编程语言过滤结果?
谢谢!
为什么你在包含PS的时候在Case-When语句中使用双引号?这是一个专栏名称。 –
因为MySQL的抱怨,如果我不 – ILikeTacos