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 쿼리에 넣는 것이 더 낫습니까? 아니면 내가 선택한 프로그래밍 언어로 결과를 필터링해야합니까?
감사!
이 시도:
SELECT DA, PA, 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
ELSE 45
END AS "Points"
FROM (SELECT DA, PA,
IF((DA - PA) > 25, DA, PA) AS PS
FROM Table1 UM) temp
PS
계산을 하위 쿼리로 이동하므로 계산을 CASE
반복하지 않고도 식에서 참조 할 수 있습니다 . 그리고 PS
문자열이 아닌 이름이어야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다