IF / CASE

SQL ์งœ๋‹ค ๋ณด๋ฉด ๋ฌธ์ž๋‚˜ ์ˆซ์ž๊ฐ™์€ ๋ฐ์ดํ„ฐ ๋„ฃ๋Š” ๊ณณ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

๊ทผ๋ฐ ๊ทธ ๊ณณ์— ๊ณ ์ •๋œ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๊ฐ’์„ ๋„ฃ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

IF ํ•จ์ˆ˜

IF(์กฐ๊ฑด์‹, ์กฐ๊ฑด์‹๋งž์œผ๋ฉด์ด๊ฑฐ, ์กฐ๊ฑด์‹ํ‹€๋ฆฌ๋ฉด์ด๊ฑฐ); 


SELECT IF(1 + 2 = 3, '๋งž์Œ', 'ํ‹€๋ฆผ');

๊ทธ๋Ÿฐ๋ฐ ์•„์‰ฝ๊ฒŒ๋„ ORACLE์—์„œ๋Š” ์ด๋ ‡๊ฒŒ IF๋ฌธ์€ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

(์œ„ ๊ตฌ๋ฌธ์€ MySQL์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ)

DECODE ํ•จ์ˆ˜

DECODE ํ•จ์ˆ˜๋Š” ์˜ค๋ผํด ์ฟผ๋ฆฌ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

ํ‘œ์ค€ SQL ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ์„œ ์‚ฌ์šฉ์„ ๊บผ๋ คํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ์•„์ฃผ ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•˜๋‹ค.

SELECT DECODE(๊ทผ๋ฌด๊ธฐ๊ฐ„  , 5, '์™•๊ณ ' , 4, '์ค‘๊ฐ„๋‹ค๋ฆฌ' , '๋ง‰๋‚ด')
FROM EMPLOYEE;

DECODE ํ•จ์ˆ˜๋Š” ํ•œ๊ณ„๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  (ํ•ด๋‹น์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ํŠน์ •๊ฐ’์ผ ๋•Œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

๊ฐ€๋…์„ฑ๊ณผ ์„ฑ๋Šฅ ์ƒ์˜ ๋ฌธ์ œ๋กœ JAVA๋‚˜ JavaScript ์ฒ˜๋Ÿผ ์กฐ๊ฑด์„ ์ฃผ๊ณ ์‹ถ๋‹ค๋ฉด

CASE WHEN์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

CASE ๋ฌธ๋ฒ•

CASE 
  WHEN ์กฐ๊ฑด์‹1 THEN ๋‚จ๊ธธ๊ฐ’1
  WHEN ์กฐ๊ฑด์‹2 THEN ๋‚จ๊ธธ๊ฐ’2
  WHEN ์กฐ๊ฑด์‹3 THEN ๋‚จ๊ธธ๊ฐ’3
END 

๋ฌธ์ž๋‚˜ ์ˆซ์ž๊ฐ™์€ ๋ฐ์ดํ„ฐ๋„ฃ๋Š” ์ž๋ฆฌ์— CASE ๋ฌธ๋ฒ•์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CASE ๋ฌธ๋ฒ• ์•ˆ์— ์กฐ๊ฑด์‹๊ณผ ์กฐ๊ฑด์‹์ด ๋งž์œผ๋ฉด ๋‚จ๊ธธ ๊ฐ’์„ ๋งค์šฐ ๋งŽ์ด ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CASE/END ์‚ฌ์ด์— WHEN ์กฐ๊ฑด์‹ THEN ๋‚จ๊ธธ๊ฐ’์„ ์—ฌ๋Ÿฌ๊ฐœ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ

์ปดํ“จํ„ฐ๋Š” ์กฐ๊ฑด์‹์„ ์œ„์—์„œ ๋ถ€ํ„ฐ ์ฐจ๋ก€์ฐจ๋ก€ ์‹คํ–‰ํ•ด๋ณด๋ฉด์„œ

1. ์กฐ๊ฑด์‹์— ๋งž์„ ๊ฒฝ์šฐ 2. ๋‚จ๊ธธ๊ฐ’์„ ๊ทธ ์ž๋ฆฌ์— ๋‚จ๊ฒจ์ฃผ๊ณ  3. CASE ๋ฌธ๋ฒ•์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด CARD ํ…Œ์ด๋ธ”์—์„œ

์‚ฌ์šฉ๊ธˆ์•ก์ด 20๋งŒ์› ์ด์ƒ์ด๋ฉด '์šฐ์ˆ˜๊ณ ๊ฐ๋‹˜'

์‚ฌ์šฉ๊ธˆ์•ก์ด 10~20๋งŒ์›์ด๋ฉด '๊ฑ๊ณ ๊ฐ'

์‚ฌ์šฉ๊ธˆ์•ก์ด 10๋งŒ์› ๋ฏธ๋งŒ์ด๋ฉด '์†๋†ˆ'

์ด๋ ‡๊ฒŒ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด

SELECT ๊ณ ๊ฐ๋ช…, ์‚ฌ์šฉ๊ธˆ์•ก,
CASE
  WHEN ์‚ฌ์šฉ๊ธˆ์•ก >= 200000 THEN '์šฐ์ˆ˜๊ณ ๊ฐ๋‹˜'
  WHEN ์‚ฌ์šฉ๊ธˆ์•ก >= 100000 AND ์‚ฌ์šฉ๊ธˆ์•ก < 200000 THEN '๊ฑ๊ณ ๊ฐ'
  WHEN ์‚ฌ์šฉ๊ธˆ์•ก < 100000 THEN '์†๋†ˆ' 
END AS ๊ณ ๊ฐํ‰๊ฐ€
FROM CARD; 

CASE 
  WHEN ์กฐ๊ฑด์‹1 THEN ๋‚จ๊ธธ๊ฐ’1
  WHEN ์กฐ๊ฑด์‹2 THEN ๋‚จ๊ธธ๊ฐ’2
  WHEN ์กฐ๊ฑด์‹3 THEN ๋‚จ๊ธธ๊ฐ’3
  ELSE ๋‚จ๊ธธ๊ฐ’4
END 

ELSE ๋ฌธ๋ฒ•๋„ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ค„์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ

๊ทธ๋Ÿผ ์กฐ๊ฑด์‹๋“ค์ด ์ „๋ถ€ ๋งž์ง€ ์•Š์„ ๊ฒฝ์šฐ ELSE ์šฐ์ธก์— ์žˆ๋Š” ๊ฐ’์„ ๋‚จ๊ฒจ์ค๋‹ˆ๋‹ค.

SELECT ๊ณ ๊ฐ๋ช…, ์‚ฌ์šฉ๊ธˆ์•ก,
CASE
  WHEN ์‚ฌ์šฉ๊ธˆ์•ก >= 200000 THEN '์šฐ์ˆ˜๊ณ ๊ฐ๋‹˜'
  WHEN ์‚ฌ์šฉ๊ธˆ์•ก >= 100000 THEN '๊ฑ๊ณ ๊ฐ'
  ELSE '์†๋†ˆ' 
END AS ๊ณ ๊ฐํ‰๊ฐ€
FROM CARD; 

์ง‘๊ณ„ํ•จ์ˆ˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q1. ๋“ฑ๊ธ‰์ด vip์ธ ์‚ฌ๋žŒ๋“ค์€ 3์ , ๋กœ์—ด์ด๋ฉด 2์ , ํŒจ๋ฐ€๋ฆฌ๋ฉด 1์ ์œผ๋กœ ๊ณ„์‚ฐํ•ด์„œ

๋ชจ๋“  ๊ณ ๊ฐ์˜ ์ ์ˆ˜๋ฅผ ๋‹ค ๋”ํ•˜๋ฉด ๋ช‡์ ์ผ๊นŒ์š”?

Q2. card ํ…Œ์ด๋ธ”์—์„œ ์žฅ๋ถ€๋ฅผ ์กฐ์ž‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ๊ธˆ์•ก 30๋งŒ์› ์ด์ƒ์€ 50% ์ฆ์•ก, 30๋งŒ์› ๋ฏธ๋งŒ์€ 10% ์ฆ์•กํ•ด์„œ

์‚ฌ์šฉ๊ธˆ์•ก์˜ ์ด ํ•ฉ๊ณ„๋ฅผ ์ถœ๋ ฅํ•ด๋ด…์‹œ๋‹ค. ๋‹ต์€ 5,147,550๋กœ ๋‚˜์˜ค๋ฉด ์ •๋‹ต์ž…๋‹ˆ๋‹ค.

Q3. ๊ณ ๊ฐ๋“ฑ๊ธ‰์„ ์žฌ์„ค์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ๊ธˆ์•ก์ด 30๋งŒ์› ์ด์ƒ์€ 'vip'

20๋งŒ์› ์ด์ƒ 30๋งŒ์› ๋ฏธ๋งŒ์€ '๋กœ์—ด'

๊ทธ ์™ธ์—” 'ํŒจ๋ฐ€๋ฆฌ'๋กœ ๋‹ค์‹œ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ฐ๋“ฑ๊ธ‰์ด ๋ณ€๋™๋  ์ด๋ฆ„๋“ค๋งŒ ์ถœ๋ ฅํ•ด๋ด…์‹œ๋‹ค.

Last updated