3주차 4강 내용 정리
IF (조건, 조건을 충족할 때, 조건을 충족하지 못할 때)
- 조건에 따라 다른 값을 반환하도록 해주는 조건 함수이다.
select restaurant_name "식당 이름",
cuisine_type "원래 음식 타입",
if(cuisine_type='Korean', '한식', '기타') "음식 타입"
from food_orders;
select addr "원래 주소",
if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
from food_orders
where addr like '%문곡리%';
select substring(if(email like '%gmail%', replace(email, 'gmail', '@gmail'), email), 10) "이메일 도메인",
count(customer_id) "고객 수",
avg(age) "평균 연령"
from customers
group by 1;
엑셀에서 사용하던 방식이라 이해하기 어렵진 않았다.
쿼리가 길어지고 괄호가 많아지니까 아직 눈에 익지 않아서 복잡하게 느껴지긴 한다.
더 친해지는 시간이 필요해보인다.
CASE when 조건1 then 결과1
when 조건2 then 결2
else 기본값
end
- SQL에서 여러 조건을 순차적으로 평가해서, 조건에 맞는 값을 반환할 수 있는 다중 분기(if-else if) 구조이다.
select order_id "주문번호",
price "가격",
quantity "수량",
case when quantity=1 then price
when quantity>=2 then price/quantity end "음식 단가"
from food_orders;
select restaurant_name "식당",
addr "주소",
case when addr like '%경기도%' then '경기도'
when addr like '%특별%' or addr like '%광역%' then substring(addr, 1, 5)
else substring(addr, 1, 2) end "변경된 주소"
from food_orders;
위의 설명과 구조가 어려워보이지만 두 개 이상의 조건을 지정해야할 때 사용한다고 생각하고 있어야겠다.
if,case 둘 다 실무에서 활용할 일이 많아보인다.
달리기반 2번 퀘스트
select date(p.created_at) "creat at",
round(avg(p.point)) "평균 포인트"
from point_users p
group by 1;
정답에 point_users 를 p로 축약해서 사용했기에 이유가 뭔지 고민해봤는데, 지금은 하나의 테이블만 사용하기에 굳이 사용하지 않아도 똑같은 값을 찾을 수 있지만 여러 테이블을 사용하거나 복잡한 쿼리에서는 별칭을 달아서 사용하는게 필요해 보인다.
ROUND (숫자 ,소수점 자리)
- SQL에서 숫자를 반올림할 때 사용하는 함수이다.