케이스를 올바르게 사용하는 방법..MySQL의 경우
여기 데모 쿼리가 있습니다.매우 간단합니다.base_price가 0인 곳에서만 가져오고 조건 3을 선택합니다.
SELECT
CASE course_enrollment_settings.base_price
WHEN course_enrollment_settings.base_price = 0 THEN 1
WHEN course_enrollment_settings.base_price<101 THEN 2
WHEN course_enrollment_settings.base_price>100 AND
course_enrollment_settings.base_price<201 THEN 3
ELSE 6
END AS 'calc_base_price',
course_enrollment_settings.base_price
FROM
course_enrollment_settings
WHERE course_enrollment_settings.base_price = 0
base_price
이decimal(8,0)
DB에서 실행하면 다음과 같은 메시지가 나타납니다.
3 0
3 0
3 0
3 0
3 0
를 삭제합니다.course_enrollment_settings.base_price
직후에CASE
:
SELECT
CASE
WHEN course_enrollment_settings.base_price = 0 THEN 1
...
END
CASE
에는 설명서에 자세히 나와 있는 두 가지 다른 양식이 있습니다.여기에서는 검색 조건을 사용하고 있기 때문에 두 번째 양식을 원합니다.
CASE case_value
WHEN when_value THEN statements
[WHEN when_value THEN statements]
ELSE statements
END
또는 다음 중 하나를 선택합니다.
CASE
WHEN <search_condition> THEN statements
[WHEN <search_condition> THEN statements]
ELSE statements
END
여기서 CASE는 search_condition이 평가하는 두 번째 시나리오의 식입니다.search_condition이 동일하지 않은 경우 else를 실행합니다.
SELECT
CASE course_enrollment_settings.base_price
WHEN course_enrollment_settings.base_price = 0 THEN 1
그래야 한다
SELECT
CASE
WHEN course_enrollment_settings.base_price = 0 THEN 1
CASE course_enrollment_settings.base_price
여기서 틀렸어요.그냥...CASE
SELECT
CASE
WHEN course_enrollment_settings.base_price = 0 THEN 1
WHEN course_enrollment_settings.base_price<101 THEN 2
WHEN course_enrollment_settings.base_price>100 AND
course_enrollment_settings.base_price<201 THEN 3
ELSE 6
END AS 'calc_base_price',
course_enrollment_settings.base_price
FROM
course_enrollment_settings
WHERE course_enrollment_settings.base_price = 0
설명 좀 해 주세요.원래 쿼리는 다음과 같이 실행됩니다.
SELECT
CASE 0
WHEN 0=0 THEN 1 -- condition evaluates to 1, then 0 (from CASE 0)compares to 1 - false
WHEN 0<1 THEN 2 -- condition evaluates to 1,then 0 (from CASE 0)compares to 1 - false
WHEN 0>100 and 0<201 THEN 3 -- evaluates to 0 ,then 0 (from CASE 0)compares to 0 - true
ELSE 6, ...
그래서 항상 3점씩 받는 거야
SELECT
CASE
WHEN course_enrollment_settings.base_price = 0 THEN 1
WHEN course_enrollment_settings.base_price>0 AND
course_enrollment_settings.base_price<=100 THEN 2
WHEN course_enrollment_settings.base_price>100 AND
course_enrollment_settings.base_price<201 THEN 3
ELSE 6
END AS 'calc_base_price',
course_enrollment_settings.base_price
FROM
course_enrollment_settings
WHERE course_enrollment_settings.base_price = 0
에는 두 가지 종류가 있으며, 사용자가 생각하는 것을 사용하지 않습니다.
하고 있는 일
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
각 조건은 대략적으로if (case_value == when_value)
(스위치 코드).
하지만, 당신은 모든 조건을when_value
그 결과 다음과 같은 결과가 초래됩니다.
if (case_value == (case_value > 100))
지금이다,(case_value > 100)
까지 평가하다.FALSE
이 조건을 충족시킬 수 있는 유일한 조건입니다.이것으로, 다음과 같은 일이 가능하게 되었습니다.
if (case_value == FALSE)
FALSE
로 변환하다.0
그리고 결과적인 완전한 표현을 통해if (case_value == 0)
세 번째 조건이 발생하는 이유를 알 수 있습니다.
당신이 해야 할 일
첫 번째를 드롭course_enrollment_settings
이 일이 없도록case_value
이 때문에 MySQL은 사용자가 두 번째 변종버전트를 사용하는 것을 인식하게 됩니다.CASE
:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
이제 전체 조건을 다음과 같이 제공할 수 있습니다.search_condition
.
또, 사용하고 있는 기능의 메뉴얼도 읽어 주세요.
그 중 일부는 당신이 선택한 가치를 말하는 것이라고 생각합니다.CASE
, 그 후술합니다.WHEN x = y
다음 구문은 두 가지 다른 사용 방법을 조합한 것입니다.CASE
. 그 중 하나여야 합니다.
CASE X
WHEN a THEN ...
WHEN b THEN ...
또는
CASE
WHEN x = a THEN ...
WHEN x = b THEN ...
언급URL : https://stackoverflow.com/questions/9588015/how-do-i-use-properly-case-when-in-mysql
'programing' 카테고리의 다른 글
CodeIgniter의 뷰 내에 뷰를 포함하는 최선의 방법 (0) | 2022.10.02 |
---|---|
위도/경도에 따라 두 점 사이의 거리를 구합니다. (0) | 2022.09.19 |
Java에서 클래스의 다른 인스턴스를 실행하는 스레드 간에 정적 변수를 동기화하려면 어떻게 해야 합니까? (0) | 2022.09.19 |
오브젝트의 모든 속성을 인쇄하는 방법 (0) | 2022.09.19 |
로짓이 뭐죠?softmax와 softmax_cross_entropy_with_logits의 차이점은 무엇입니까? (0) | 2022.09.19 |