我試圖在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