我正在尝试在 Mysql 中使用 CASE 语句,虽然 MySQL 没有抱怨我的查询,但它无法提供正确的结果。
我试图做的是相当于:
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 查询中更好,还是应该用我选择的编程语言过滤结果?
谢谢!