-
SQL 3-2일차 / 조건확장, 데이터 타입SQL 정리/사전캠프 2024. 3. 20. 14:41
어제 하루 일찍 시작한 내용이 중요한 것이 많아 나눠서 학습을 진행하게 되었다.
지금까지는 코드문의 타건 작성을 통해 암기하고자 코드의 원문이 아닌 원래의 이름으로 작성하였으나
각 문법이 더욱 중요해지고 익숙해졌기에 사용하던 코드를 그대로 복사, 기록하여
시간효율과 기억상의 이점을 챙기도록 해야겠다.
다 조건형 if문- case
select case when cuisine_type='korean' then '한식' when cuisine_type in ('Japanese', 'Chinese') then '아시아' else '기타' end "음식타입", cuisine_type from food_orders
select order_id, price, quantity, case when quantity = 1 then price when quantity >=2 then price/quantity end "음식단가" from food_orders
위 두 코드의 차이점은 else문, 즉 예외 처리 가 필요한 상황인가 아닌가에 따라 포함 될 수도, 아닐수도 있음을 나타낸다.
집합의 새로운 명칭이 아닌 각 데이터의 새로운 카테고리를 형성 및 정의하는데 유용하다.
풀어 말하자면 group by 로는 구간별 집합에 명명이 가능하지만 case는 각 데이터마다 라벨링이 가능하다는 의미이다.
데이터 타입
문자형 / 숫자형
--문자를 숫자로 cast(if(rating='not given', '1', rating) as decimal) --숫자를 문자로 concat(restaurant_name, '-', cast(order_id as char))
decimal - 소수점?
char(actor?)
의문점 / 추가 고려 사항
case when price/quantity <=5000 then '저가' when price/quantity between 5001 and 15000 then '중가' when price/quantity >15000 then '고가' end "가격대"
이러한 조건문을 달 때, if문을 활용하여 quantity 의 경우의 수, 즉 0을 제외하는 것은 필요성을 느끼나
quantity=1 then price를 굳이 필요로 하는가,
어느 쪽이 자원을 덜 필요로 하는가가 궁금하다.
select day_of_the_week, delivery_time, case when if( day_of_the_week ='weekday' and delivery_time >=25 or day_of_the_week = 'weekend'and delivery_time >=30 ,'fail', 'achieve') "배달 성과" from food_orders select order_id, restaurant_name , day_of_the_week, delivery_time, case when day_of_the_week ='weekday' and delivery_time >=25 then 'Late' when day_of_the_week = 'weekend'and delivery_time >=30 then 'Late' else 'On-time'end "배달 성과" from food_orders
왜 위의 코드는 불가능하고
아랫코드는 가능한지 의문이다.
관점은 if 문의 조건문 내에 or이 들어가 중복 적용이 불가능한가?
답변 : 스프레드 시트나 엑셀에선 가능하나
SQL 에선 지원이 불가능한 언어이다.
SQL 내에서 추가적인 조건을 가지기 위해서는 case when 절을 이용하는 것이 유효.
'SQL 정리 > 사전캠프' 카테고리의 다른 글
5일차 - null값, coalesce, pivot, 시간형식 (2) 2024.03.22 SQL - 4일차 (0) 2024.03.20 SQL - 3일차 (0) 2024.03.19 SQL - 2일차 연산자 / 범주 / 정렬 (1) 2024.03.19 SQL - 1일차 기초문/필터링 (0) 2024.03.19