IF
어떤 조건에 의하여 나타내는 데이터를 변경하고 싶을 때 사용
IF (조건, 조건을 충족할 때, 조건을 충족하지 못할 때)
select substring(if(email like '%gmail%',
replace(email, 'gmail', '@gmail'), email), 10) "이메일 도메인",
count(customer_id) "고객 수",
avg(age) "평균 연령"
from customers
group by 1
글자를 추출하여 보여주는데 안의 조건이 있고 (IF문 시작부터 끝까지. 즉 'IF ~ EMAIL)' 까지가 조건),
시작은 10번째 글자부터, 끝까지 보여주고 (몇글자까지 추출할지 생략 가능한데 시작인 10만 써놓았고 마지막을 적지 않았음 이처럼 생략할 경우에는 10번째 글자부터 끝까지 추출함)
이 컬럼의 별명을 "이메일 도메인" 이라고 해주세요.
조건은
만약 EMAIL 컬럼 데이터 중 'GMAIL' 이라는 단어가 포함 되면, (IF( ~ %GMAIL%'))
EMAIL 컬럼의 데이터 안의 'GMAIL' 이라는 단어를 '@GMAIL' 로 바꿔주세요. (REPLACE( ~ '@GMAIL'))
그 외의 조건은 EMAIL 컬럼의 데이터를 그대로 보여주세요. ( EMAIL) )
CUSTOMER_ID 컬럼의 데이터 수를 "고객 수" 라는 별명으로 보여주세요.
AGE 컬럼 데이터의 평균을 "평균 연령"이라는 별명으로 보여주세요.
CUSTOMERS 테이블에서
"이메일 도메인"이라 별명 붙인 컬럼을 그룹으로 묶어 보여주세요.

CASE WHEN
각 조건 별로 적용할 값을 지정할 때이다.
ELSE 생략 가능
CASE WHEN '컬럼명'(식 사용 가능) THEN '적용값' (이후로는 조건과 적용값마다 WHEN THEN 쭉쭉 쓰면됨.) ELSE '조건 외의 경우 적용값' END
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
ADDR 컬럼의 데이터가 '경기도' 라는 단어를 포함하면 '경기도' 라는 결과 값을,
'특별' 혹은 '광역'이라는 단어를 포함하면 ADDR 컬럼의 첫번째 문자부터 5개의 문자를 보여줘.
나머지의 경우에는 ADDR 컬럼의 첫번째 문자부터 2개의 문자를 보여줘.
이를 '변경된 주소' 라는 별명의 컬럼으로 보여줘.

case 문 안에 if 문 넣기도 가능하다.
SELECT
CASE
WHEN day_of_the_week = 'weekday' THEN 3000 * IF(quantity > 3, 1.2, 1)
WHEN day_of_the_week = 'weekend' THEN 3500 * IF(quantity > 3, 1.2, 1)
END "배달할증료",
restaurant_name,
order_id,
day_of_the_week,
quantity
FROM food_orders
평일에는 3000원 허나 종류가 3개 초과하여 배달할시 1.2배 곱하고 아니면 1배 곱하라.
주말에는 3500원 허나 종류가 3개 초과하여 배달할시 1.2배 곱하고 아니면 1배 곱하라.
이를 "배달할증료" 라는 별명을 붙인 컬럼으로 보여줘.

'SQL,Database' 카테고리의 다른 글
| mysql에서 사용할 수 없는 값이 있을 때 / Pivot Table처럼 만들기 (0) | 2024.11.28 |
|---|---|
| Database,FIrestore (0) | 2024.11.27 |
| subquery, JOIN (0) | 2024.11.26 |
| 집계 함수, 범주별 연산(GROUP BY), 정렬(ORDER BY), 정보수정 (0) | 2024.11.22 |
| 별명 붙이기, WHERE, 논리연산자 (2) | 2024.11.21 |