데이터로그😎
조건문 본문
IF문
IF(조건, 참 expr, 거짓 expr) → where에 의해 걸러짐
# 도시 인구가 100만이 넘으면 'Big City'. 안 넘으면 'Small City'
SELECT name, Population,
IF (Population >= 1000000,'Big City','Small City')
FROM city;
# 도시의 인구가 100만이 넘으면 'Big City', 50만이 넘으면 'Medium City', 안넘으면 'Small City'
SELECT name, Population,
IF (Population >=1000000,'Big City',
IF(Population >=500000, 'Medium City','Small City'))
FROM city;
NULL
*IFNULL(컬럼, null인 경우 채울 값)
# NULL: 데이터가 없음을 의미
SELECT *
FROM country
WHERE IndepYear IS NULL;
SELECT *
FROM country
WHERE IndepYear IS NOT NULL;
# NULL값을 처리 -> NULL 값 대신에 다른 값으로 채우겠다.
# IFNULL (컬럼명, 채울값)
SELECT IndepYear, IFNULL(IndepYear, 0), Name
FROM country;
처음 '나라 별로 인구가 10억 이상, 1억이상, 1억 이하인 컬럼을 추가하여 표현해라' 라는 문제를 보았을 때는 위에 했던 것 처럼 IF문을 쓰고 group by 를 하면 되겠지 라고 생각했다. 그러나 이게 왠걸. 되지 않는다. 오류가 뜬다!
조건문 + 집계까지 하고 싶다면 CASE WHEN 을 써야 한다.
<틀린 예시>
# 나라 별로 인구가 10억 이상, 1억 이상, 1억 이하인 컬럼을 추가하여 표현
SELECT name, population,
if (population >=1000000000, '10억 이상', if(population>=100000000, '1억 이상', '1억 이하')) as amount
FROM country
GROUP BY amount;
CASE
CASE WHEN THEN END
-- CASE
-- WHEN (조건1) THEN 출력1,
-- WHEN (조건2) THEN 출력2,
-- END
# 나라 별로 인구가 10억 이상, 1억 이상, 1억 이하인 컬럼을 추가하여 표현
SELECT name, Population,
CASE WHEN Population >= 1000000000 THEN '10억 이상'
WHEN Population >= 100000000 THEN '1억 이상'
WHEN Population < 100000000 THEN '1억 미만'
END AS 'Result'
FROM country;
# groupby
SELECT AVG(Population) as avg_pop,
CASE WHEN Population >= 1000000000 THEN '10억 이상'
WHEN Population >= 100000000 THEN '1억 이상'
WHEN Population < 100000000 THEN '1억 미만'
END AS 'Result'
FROM country
GROUP BY result;
# DATE_FORMAT (날짜 데이터, 포맷팅)
# 날짜: (년-월-일 시:분:초)
use sakila;
SELECT amount, DATE_FORMAT(payment_date, '%Y-%m') as 'monthly'
FROM payment;
SELECT SUM(amount), DATE_FORMAT(payment_date, '%Y-%m') as 'monthly'
FROM payment
GROUP BY monthly;
FYI) https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html 데이트 포맷 함수
그룹바이와 셀렉트의 관계
SELECT AVG(Population) as avg_pop,
CASE WHEN Population >= 1000000000 THEN '10억 이상'
WHEN Population >= 100000000 THEN '1억 이상'
WHEN Population < 100000000 THEN '1억 미만'
END AS 'Result'
FROM country
GROUP BY result;
그룹바이를 하는 기준 : 절대적
그룹바이 절은 굉장히 단순해야 한다. 추가적으로 정도 가져오려면 조인, 셀프조인 이런걸 해야한다.
카테고리가 될 수 없는 컬럼은 절대 그룹바이에 들어가면 안된다 (그룹 지어질 수 없는 컬럼).
'SQL > MySQL' 카테고리의 다른 글
서브 쿼리 (0) | 2023.09.06 |
---|---|
ERD 표기법 (0) | 2023.09.06 |
python - mysql 연결 (0) | 2023.09.06 |
JOIN (1) | 2023.09.05 |
Basic Query (0) | 2023.09.05 |