๐ Case๋ฌธ
์ฌ๋ฌ ์กฐ๊ฑด์ ํ๋ฒ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ '๋ค์ค ๋ถ๊ธฐ' ๋ฌธ๋ฒ์ด๋ค
- ์คํ ์ด๋ ํ๋ก์์ ์์ SQL ํ๋ก๊ทธ๋๋ฐ๋ฌธ์์ ํ์ฉ
- SELECT ๋ฌธ์์ CASE๋ฌธ์ผ๋ก ๊ฐ ํธ์ถ
CASE
WHEN ์กฐ๊ฑด1 THEN
SET ๋ณ์๊ฐ
WHEN ์กฐ๊ฑด1 THEN
SET ๋ณ์๊ฐ
WHEN ์กฐ๊ฑด1 THEN
SET ๋ณ์๊ฐ
ELSE
SET ๋ณ์๊ฐ
END CASE;
โ๏ธ SELECT๋ฌธ์์ CASE๋ฌธ ํ์ฉํด์ ํ์๋ฑ๊ธ ๋ถ๋ฅํ๊ธฐ
SELECT M.mem_id, M.mem_name, SUM(price*amount) "์ด๊ตฌ๋งค์ก",
CASE
WHEN (SUM(price*amount) >= 1500) THEN '์ต์ฐ์๊ณ ๊ฐ'
WHEN (SUM(price*amount) >= 1000) THEN '์ฐ์๊ณ ๊ฐ'
WHEN (SUM(price*amount) >= 1) THEN '์ผ๋ฐ๊ณ ๊ฐ'
ELSE '์ ๋ น๊ณ ๊ฐ'
END 'ํ์๋ฑ๊ธ' -- CASE๋ฌธ์ ํ์ฉํด์ ์๋ก์ด 'ํ์๋ฑ๊ธ'์ด ์ถ๊ฐ
FROM buy B
RIGHT OUTER JOIN member M
ON B.mem_id = M.mem_id
GROUP BY M.mem_id
ORDER BY SUM(price*amount) DESC;
์ ์ฒด ์ํ ๊ตฌ๋งค์ก์ด 1500์ด์ ์ ์ต์ฐ์๊ณ ๊ฐ, 1000์ด์ ์ ์ฐ์๊ณ ๊ฐ, 1์ด์ ์ ์ผ๋ฐ๊ณ ๊ฐ, ๋๋จธ์ง๋ ์ ๋ น๊ณ ๊ฐ์ผ๋ก ๋ถ๋ฅํ์๋ค.
โ๏ธํ๋ก์์ ์ CASE๋ฌธ ๋ฃ๊ธฐ
DROP PROCEDURE IF EXISTS caseProc;
DELIMITER $$
CREATE PROCEDURE caseProc() -- ํ๋ก์์ ์ด๋ฆ ์ค์
BEGIN
DECLARE point INT; -- ๋ณ์ ์์ฑ
DECLARE credit CHAR(1); -- ๋ณ์ ์์ฑ
SET point = 88; -- point์ ์ด๊ธฐ๊ฐ ์ค์
CASE
WHEN point >= 90 THEN
SET credit = 'A';
WHEN point >= 80 THEN
SET credit = 'B';
WHEN point >= 70 THEN
SET credit = 'C';
WHEN point >= 60 THEN
SET credit = 'D';
ELSE
SET credit = 'F';
END CASE;
SELECT CONCAT('์ทจ๋์ ์ ==>', point) '์ทจ๋์ ์', CONCAT('ํ์ ==>', credit) 'ํ์ ';
END $$
DELIMITER ; -- ํ๋ก์์ ๋ฌธ end
CALL caseProc(); -- ํ๋ก์์ ํธ์ถ
๊ฒฐ๊ณผ๋ ์ด๋ ๊ฒ ๋์จ๋ค!

๋ค์์๋ ์ค์ ๋ฌธ์ ์์ ๋ก CASE๋ฌธ์ ๋ค๋ค๋ณด๊ฒ ๋ค !