SQL 연습 - 비교연산자 = , if 조건문이 여러개일때.. case ~ when
1. 문제
코딩테스트 연습 - 조건에 부합하는 중고거래 상태 조회하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 풀이
먼저 문제를 잘 읽어야한다...
중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회하는 SQL문을 작성해주세요..
근데 잘 보면.., '2022년 10월 5일에 등록된' 게시글의 게시글ID,...를 조회하라고 나와있잖아
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE, STATUS FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05';
근데 STATUS가 SALE이면 '판매중', RESERVED이면 '예약중', DONE이면 '거래완료'로 출력해달래
https://deepdata.tistory.com/1006
SQL 연습 - 시간 차이는 무조건 DATEDIFF, MYSQL의 if문-
1. 문제 코딩테스트 연습 - 자동차 대여 기록에서 장기/단기 대여 구분하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스
deepdata.tistory.com
이전에 공부한 IF문은 IF(조건문, '참'인 경우, '거짓'인 경우)로 조건 1가지만 가능했는데..?
그러면 STATUS가 SALE인지 판단하고 참이면 '판매중'으로 바꾸고
거짓이면 다시 조건문으로 RESERVED인지 판단하고 참이면 '예약중'으로 바꾸고
이것도 거짓이면 '거래완료'로 바꾼다
IF(조건문1, '조건문 1이 참'인 경우, ""IF(조건문2, '조건문 2가 참'인 경우, '조건문 2도 거짓'인 경우)"")로 연쇄적으로 사용하면 된다
IF(STATUS = 'SALE' , '판매중', IF(STATUS = 'RESERVED','예약중','거래완료')) as STATUS
여기서 프로그래밍 하다보니.. 비교 연산자가 == 인줄
https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%EC%97%B0%EC%82%B0%EC%9E%90-%EC%A0%95%EB%A6%AC
[MYSQL] 📚 연산자 종류 정리
산술 연산자 산술 연산자 설명 +, - ,*, / 덧셈, 뺄셈, 곱셈, 나눗셈 DIV 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 소수 부분을 버림. %또는 MOD 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 그 나
inpa.tistory.com
SQL에서는 동일한지 비교하는 연산자가 =이더라고
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
IF(STATUS = 'SALE' , '판매중', IF(STATUS = 'RESERVED','예약중','거래완료')) as STATUS
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID desc;
또 다른 방법으로는 CASE문이라는게 있다
https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%EC%A0%9C%EC%96%B4%EB%AC%B8
(
CASE
WHEN 조건문1 THEN 조건문 1이 참인 경우
WHEN 조건문2 THEN 조건문 2가 참인 경우
WHEN 조건문3 THEN 조건문 3이 참인 경우
...
...
(ELSE '모든 조건문이 거짓인 경우') >>> 생략가능
END
) as (바꾸고 싶은 컬럼 이름명)
형태로 사용하면 된다.
-- 코드를 입력하세요
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
(
CASE
WHEN STATUS = 'SALE' THEN '판매중'
WHEN STATUS = 'RESERVED' THEN '예약중'
WHEN STATUS = 'DONE' THEN '거래완료'
END
) as STATUS
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID desc;
'프로그래밍 > SQL' 카테고리의 다른 글
이전 행을 가져오는 lag()와 이후 행을 가져오는 lead() (0) | 2024.10.22 |
---|---|
SQL 코딩테스트 복기 - JSON array에 들어있는 원소의 개수(JSON_LENGTH) (0) | 2024.04.27 |
SQL 연습 - 통계함수 사용할때 주의할 점, limit로 지정한 수 만큼 행 추출 (0) | 2023.10.11 |
SQL 연습 - NULL값 체크하는 방법 (0) | 2023.09.27 |
SQL 연습 - 평균을 구하는 함수는 average가 아니고 avg- (0) | 2023.09.23 |