9.13. Á¶°Ç½Ä

º»Àý¿¡¼­´ÂPostgreSQL¿¡¼­ »ç¿ë °¡´ÉÇÑSQL¿¡ ÁذÅÇÏ´Â Á¶°Ç½Ä¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.

Tip: ¿©±â¼­ ¼³¸íÇÏ´Â Á¶°Ç½Äº¸´Ù ¹ßÀüÇÑ ±â´ÉÀ» ¿ä±¸ÇÏ´Â °æ¿ì´Â, º¸´Ù ÀÚ¼¼ÇÏ°Ô Ç¥ÇöµÈ ÇÁ·Î±×·¥ ¾ð¾î·Î ÀúÀåµÈ ÇÁ·Î½ÃÁ®¸¦ ±â¼úÇÏ´Â °ÍÀ¸·Î ÇØ°áµË´Ï´Ù.

9.13.1. CASE

SQLÀÇCASE½ÄÀº ´Ù¸¥ ¾ð¾îÀÇ if/else ±¸¹®°ú À¯»çÇÑ ¹ü¿ë Á¶°Ç½ÄÀÔ´Ï´Ù.

CASE WHEN 
condition
 THEN 
result

     [WHEN ...]
     [ELSE 
result

]
END

CASE±¸´Â ½ÄÀÌ À¯È¿ÇÑ À§Ä¡ÀÌ¸é ¾îµð¿¡¼­¶óµµ »ç¿ë °¡´ÉÇÕ´Ï´Ù. condition ´ÂbooleanÇüÀÇ °á°ú¸¦ ¹ÝȯÇÏ´Â ½ÄÀÔ´Ï´Ù. °á°ú°¡ trueÀÎ °æ¿ì, CASE½ÄÀÇ °ªÀº Á¶°ÇÀ» °ÅÃÄ result °¡ µË´Ï´Ù. °á°ú°¡ falseÀÎ °æ¿ì, °°Àº ¹æ½ÄÀ» ÀÌ¿ëÇÏ¿© ÈÄ¿¡ °è¼ÓµÇ´ÂWHEN±¸¸¦ °Ë»öÇÒ ¼ö ÀÖ½À´Ï´Ù. WHENÀÇ condition °¡ Çϳªµµ true°¡ ¾Æ´Ñ °æ¿ì, CASE½ÄÀÇ °ªÀºELSE±¸ÀÇ result °¡ µË´Ï´Ù. ELSE±¸°¡ »ý·« µÇ°í, ¾î´À Á¶°Ç°úµµ ÀÏÄ¡ÇÏÁö ¾Ê´Â °æ¿ì, °á°ú´Â NULLÀÔ´Ï´Ù.

ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

An example:

SELECT * FROM test;

 a
---
 1
 2
 3


SELECT a,
       CASE WHEN a=1 THEN 'one'
            WHEN a=2 THEN 'two'
            ELSE 'other'
       END
    FROM test;

 a | case
---+-------
 1 | one
 2 | two
 3 | other

¸ðµç result ½ÄÀÇ µ¥ÀÌÅÍÇüÀº ´ÜÀÏÀÇ Ãâ·ÂÇü°ú ȣȯ¼ºÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀºSection 10.5À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.

ÀÌÇÏÀÇ"°£·«Çü" CASE½ÄÀº À§¿¡ ±â¼úÇÑ ÀÏ¹Ý Çü½ÄÀ¸·ÎºÎÅÍÀÇ Æ¯º°ÇÑ º¯ÇüÀÔ´Ï´Ù.

CASE 
expression

    WHEN 
value
 THEN 
result

    [WHEN ...]
    [ELSE 
result

]
END

expression ´Â µ¿ÀÏÇÑ °ÍÀÌ ¹ß°ßµÉ ¶§±îÁöWHEN±¸·Î ÁöÁ¤µÈ ¸ðµç value ¿Í °è»êµÇ°í ºñ±³µË´Ï´Ù. µ¿ÀÏÇÑ °ÍÀÌ ¹ß°ßµÇÁö ¾Ê´Â °æ¿ì,ELSE±¸ÀÇ result (ȤÀº NULL°ª)°¡ ¹ÝȯµË´Ï´Ù. À̰ÍÀº C¾ð¾îÀÇswitch¹®°ú À¯»çÇÕ´Ï´Ù.

À§ÀÇ ¿¹´Â °£·«ÇüCASE±¸¹®À» »ç¿ëÇØ ´ÙÀ½°ú °°ÀÌ ¾µ ¼ö°¡ ÀÖ½À´Ï´Ù.

SELECT a,
       CASE a WHEN 1 THEN 'one'
              WHEN 2 THEN 'two'
              ELSE 'other'
       END
    FROM test;

 a | case
---+-------
 1 | one
 2 | two
 3 | other

CASE½ÄÀº, °á°ú¸¦ °áÁ¤Çϱâ À§Çؼ­ ÇÊ¿äÇÏÁö ¾Ê´Â ºÎ½ÄÀÇ °ªÀ» ±¸ÇÏÁö ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¸é, ÀÌÇÏ´Â 0À¸·Î ³ª´©¾î ¿¡·¯°¡ ¹ß»ýÇÏ´Â °ÍÀ» ¹æÁöÇϱâ À§ÇÑ ¹æ¹ýÀÔ´Ï´Ù.

SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;

9.13.2. COALESCE

COALESCE(
value
 [, ...])

COALESCEÇÔ¼ö´Â, NULLÀÌ ¾Æ´Ñ ÀÚ½ÅÀÇ ÃÖÃÊÀÇ Àμö¸¦ ¹ÝȯÇÕ´Ï´Ù. ¸ðµç Àμö°¡ NULLÀÎ °æ¿ì¿¡°Ô¸¸ NULLÀÌ ¹ÝȯµË´Ï´Ù. µ¥ÀÌÅ͸¦ Ç¥½ÃÀÇ ¸ñÀûÀ¸·Î ÃßÃâÇÒ ¶§, NULL°ª ´ë½Å¿¡ µðÆúÆ®°ªÀÌ »ç¿ëµË´Ï´Ù. ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

SELECT COALESCE(description, short_description, '(none)') ...

CASE½Ä °°ÀÌ,COALESCE´Â °á°ú¸¦ °áÁ¤Çϱâ À§Çؼ­ ÇÊ¿äÇÏÁö ¾ÊÀº ÀμöÀÇ °ªÀ» ±¸ÇÏÁö ¾Ê½À´Ï´Ù. Áï, ºñNULL Àμö°¡ ¹ß°ßµÇ¸é, ±× ¿ìÃø¿¡ ÀÖ´Â Àμö´Â Æò°¡µÇÁö ¾Ê½À´Ï´Ù. ÀÌ SQL Ç¥ÁØ ÇÔ¼ö´ÂNVL¹×IFNULL¿Í À¯»çÇÑ ±â´ÉÀ» Á¦°øÇÏ¿©, ´Ù¸¥ ¸î °³ÀÇ µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ¿¡¼­ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù.

9.13.3. NULLIF

NULLIF(
value1
, 
value2
)

NULLIFÇÔ¼ö´Â, value1 ¿Í value2 °¡ µ¿ÀÏÇÑ °æ¿ì, NULL°ªÀ» ¹ÝȯÇÕ´Ï´Ù. ±× ¿ÜÀÇ °æ¿ì´Â value1 ¸¦ ¹ÝȯÇÕ´Ï´Ù. À̰ÍÀ» »ç¿ëÇÏ¿©, »ó±âÀÇCOALESCEÀÇ ¿¹ÀÇ ¿ª¿¬»êÀ» ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

SELECT NULLIF(value, '(none)') ...

value1 °¡(none)¶ó¸é NULLÀ» ¹ÝȯÇÕ´Ï´Ù. ¾Æ´Ï¸é value1 ¸¦ ¹ÝȯÇÕ´Ï´Ù.

9.13.4. GREATEST¹×LEAST

GREATEST(
value
 [, ...])
LEAST(
value
 [, ...])

GREATEST¿ÍLEASTÇÔ¼ö´Â ¸ðµç ¼ö½Ä¿¡¼­ ÃÖ´ë°ª ȤÀº ÃÖ¼Ò°ªÀ» ¼±ÅÃÇÕ´Ï´Ù. ¼ö½ÄÀº, °á°úÀûÀ¸·Î ¾òÀ» ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ÇüÅÂ¿Í °øÅëÀÇ ÇüÅ·Πº¯È¯ÇÒ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù. (ÀÚ¼¼ÇÑ °ÍÀºSection 10.5À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä). ¸®½ºÆ®¾ÈÀÇ NULL°ªÀº ¹«½ÃµË´Ï´Ù. ¸ðµç °ªÀÌ NULLÀ̶ó°í Æò°¡µÇ¾úÀ» °æ¿ì¿¡ ÇÑÇØ¼­ °á°ú´Â NULLÀÌ µË´Ï´Ù.

GREATEST¹×LEAST´Â SQL Ç¥ÁØ¿¡ ÀÖÁö ¾Ê½À´Ï´Ù¸¸, °øÅëµÈ È®ÀåÀÔ´Ï´Ù.