programing

케이스를 올바르게 사용하는 방법..MySQL의 경우

sourcetip 2022. 9. 19. 22:52
반응형

케이스를 올바르게 사용하는 방법..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_pricedecimal(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

반응형