상세 컨텐츠

본문 제목

이중 case 문 mysql (mysql 이중 case)

DB/MySql

by husks 2016. 8. 9. 15:20

본문

반응형


mysql 이중 case 문 입니다.


일반적으로 case문은 쿼리에서 if문처럼 사용됩니다.


일반 프로그램 처럼 if문 안에 if문을 사용하는 경우 mysql에서도 case 문 안에 case 문을 넣어 사용할수 있습니다.


예를 들면 도서 테이블에서 할인 여부를 판단 하고 할인이 된다면 할인율 조건에 맞게 값을 노출하는 경우 입니다.


아래는 예제 입니다. (자세한 내용은 주석을 참고하세요.)


select
	id,
    name,
    writer,
    genre,
    discount_yn,
    discount_rate,
    price,
    case
        discount_yn when 'N' then price #할인여부가 N 이라면 기본 책가격
    else
        case
            when discount_rate != 0 then price - (price * discount_rate /100) #할인여부가 Y이며 할인율이 0이 아니라면 할인율 적용
            else price - (price * 5 /100) #할인여부가 Y이며 할인율이 0이라면 기본할인율(5%) 적용
        end
    end sale_price 
from
    books;


추가: 이번 예제에서 사용한 테이블 및 데이터


CREATE TABLE books (
  id VARCHAR(5) NOT NULL,
  name VARCHAR(20) NOT NULL,
  writer VARCHAR(20) NOT NULL,
  price DECIMAL(10,2) DEFAULT 0,
  genre VARCHAR(20) NOT NULL,
  publisher VARCHAR(20) NOT NULL,
  discount_yn CHAR(1) NOT NULL,
  discount_rate DECIMAL(10,0) DEFAULT 0,
  cnt DECIMAL(10,0) DEFAULT 0,
  PRIMARY KEY  (id)
);

insert into books(
  id,
  name,
  writer,
  price,
  genre,
  publisher,
  discount_yn,
  discount_rate
) values (
  'a1',
  '홍길동전',
  '허균',
  300,
  '소설',
  '허균 출판사',
  'N',
  0
)
 on duplicate key update
 cnt = cnt+1;
      
insert into books(
  id,
  name,
  writer,
  price,
  genre,
  publisher,
  discount_yn,
  discount_rate
) values (
  'b1',
  '레미제라블',
  '빅토르 위고',
  900,
  '소설',
  '빅토르 위고 출판사',
  'N',
  0
)
 on duplicate key update
 cnt = cnt+1;
 
insert into books(
  id,
  name,
  writer,
  price,
  genre,
  publisher,
  discount_yn,
  discount_rate
) values (
  'b2',
  '백경',
  '허먼 멜빌',
  1500,
  '소설',
  '허먼 멜빌 출판사',
  'Y',
  30
)
 on duplicate key update
 cnt = cnt+1;


반응형

관련글 더보기

댓글 영역