멋쟁이사자처럼 오늘 공부 후기 챌린지 - 데이터 분석 편
이런 고민을 하고 있다면, 지금 이 순간에도 멋쟁이사자처럼에서 데이터 분석 부트캠프를 수강하며 자신만의 속도로 성장 중인 수강생들을 주목해보세요.
배우고 잊어버리는 건 누구나 겪는 일이에요. 하지만 멋쟁이사자처럼 부트캠프는 단순히 배우는 것에 그치지 않고, 배운 내용을 내 것으로 만드는 방법까지 고민하고 있어요. 그렇다면, 배운 것을 가장 효과적으로 습득하는 방법은 무엇일까요? 바로 기록하고 정리하는 것이죠. 배운 내용을 정리하고 기록하면, 기억은 오래 남고 실전에서도 활용할 수 있으니까요!
멋쟁이사자처럼 부트캠프는 수강생들이 배운 내용을 정리하고 공유할 수 있도록 TIL (Today I Learned) 블로그 챌린지를 진행하고 있어요. 그래서 오늘, 강사님과 멘토님에게 배운 내용을 체계적으로 기록하며 성장하고 있는 수강생의 이야기를 가져왔어요. 작고 사소해 보일지라도 배운 내용을 정리하고, 기록하면서 성장한 이들의 소중한 경험을 지금 확인해 보세요.
MYSQL 내장함수
문자형
CONCAT, TRIM, REPLACE
LOCATE
숫자형
ABS, MOD, POW
CEIL, FLOOR,ROUND
날짜형
CURDATE,CURTIME,NOW
DATE_FORMAT
NULL활용 함수
IFNULL, COALESCE, NULLIF
문자형 함수 - CONCAT, TRIM, REPLACE
1. 문자열을 하나로 연결해주는 함수
: SELECT CONCAT ('str1','str2')
SELECT CONCAT('Hello', '! ', 'World'); # Hello! World
2. 특정문자 / 공백을 삭제하는 함수
: SELECT TRIM(LEADING/TRAILING/BOTH '삭제할 문자' FROM '원래 텍스트')
LEADING: 앞부분을 자름
TRAILING: 뒷부분을 자름
BOTH: 앞 뒤 다 자름
SELECT TRIM('-' FROM '---title---');# title
SELECT TRIM(LEADING '-' FROM '---title---');# title---
SELECT TRIM(TRAILING '-' FROM '---title---');# ---title
3. 문자열을 수정/대체하기 위해 사용하는 함수
: SELECT REPLACE('문자열 원문', '바꾸고 싶은 문자', '바꿀 문자')
# 변경
SELECT REPLACE ('SUNHEE?', '?', '!')# SUNHEE!# 삭제
SELECT REPLACE ('SUNHEE!', '!', '')# SUNHEE
4. 문자 위치 찾는 함수
: SELECT LOCATE ('찾으려는 문자', '컬럼명(원문)',[pos])
찾으려는 문자가 있다면, 그 문자의 첫 번째 위치를 반환
찾으려는 문자가 없다면, 0을 반환
pos자리에 숫자를 작성하면 해당 위치부터 탐색
띄어쓰기도 포함한 값을 출력한다.
SELECT LOCATE ('타파', '가나다라마바사아자차카타파하');#12
SELECT LOCATE ('타파', '가나다 라마바 사아자 차카 타파하');#16 띄어쓰기 포함
숫자형 함수 - ABS,MOD,POW,CEIL,FLOOR,ROUND
SELECT
+
ABS(x)
: x의 절대값 반환MOD(n,m)
: n을 m으로 나누었을때의 나머지 반환 (n%m과 동일)POW(n,m)
: n의 m승의 결과를 반환CEIL(x)
: x의 올림값을 반환FLOOR(x)
: x의 내림값을 반환ROUND(x[,d])
: x의 d자리수 반올림값 반환
날짜형 함수 - CURDATE,CURTIME,NOW,DATE_FORMAT
`SELECT`` +
CURDATE()
: 현재 날짜를 반환CURTIME()
: 현재 시간을 반환NOW()
: 현재 날짜 + 시간을 반환DATE_FORMAT(date,format)
: 날짜 정보를 원하는 format으로 변환
NULL 관련 함수 - IFNULL, NULLIF, COALESCE
IFNULL(expr1, expr2) : expr1이 null이면, expr2를 반환
SELECT IFNULL(NULL, '비어있는 값입니다.');# 비어있는 값입니다.
SELECT IFNULL(100, '비어있는 값입니다.');# 100# customer 테이블에서 name과 birth_year를 조회할 때,# birth_year가 NULL이면 No data가 출력될 수 있는 쿼리문 작성
SELECT
customer_name,
IFNULL(birth_year, 'No data')#birth_year에 값이 있으면 값 출력, 없으면 'No data'
FROM customer;
NULLIF(expr1, expr2)
expr1 = expr2 , NULL반환
expr1 != expr2, expr1을 반환
SELECT NULLIF('hello', 'hello');# NULL
SELECT NULLIF('hello', 'world');# hello
COALESCE(v1, v2, v3) : v1부터 순서대로 확인해서 null이 아닌 값을 반환
SELECT COALESCE('hello', 'world', NULL);# hello
SELECT COALESCE(NULL, 'hello', NULL);# hello
SELECT COALESCE(NULL, NULL, NULL);# NULL# customer 테이블에서 gender가 N이거나 NULL인 경우# customer_name을 출력하고 만약 Name도 NULL인 경우 'No Data'를 출력
수정필요 SELECT COALESCE(NULLIF(gender, 'N'), customer_name, 'No Data') FROM customer;
NULLIF(gender,'N') : gender = N, Null을 반환 / gender != N, gender값 반환
FROM절 뒤에 위치
정렬에서 NULL값이 존재할 경우, 오름차순 정렬시 NULL이 가장 먼저 출력
마지막에 출력하고 싶으면 ORDER BY 에 IS NULL조건 추가
# country 테이블에서 Continent 필드가 'Africa'인 데이터 중에# IndepYear 기준으로 오름차순 정렬할때 NULL 데이터를 마지막에 위치하도록# Name, IndepYear 데이터 조회
SELECT
name, indepyear
FROM
country
WHERE
continent = 'Africa'
ORDER BY
indepyear IS NULL,
indepyear;
LIMIT : 조회하는 레코드의 수 제한
LIMIT [offset,] row_count;
offset : 시작하는 레코드의 위치. 작성하지 않는 경우는 첫 번째 레코드부터 반환
offset은 0부터 시작함
row_count : 조회하는 최대 레코드 수 설정
# Population 내림차순 기준으로 top 5 조회
ORDER BY
Population DESC# 오름차순 - ASC / 생략, 내림차순 - DESC
LIMIT 5;
# Population 내림차순 기준으로 6번째부터 12번째 데이터만 조회
ORDER BY
Population DESC
LIMIT 5, 7;
GROUP BY
: GROUP BY는 SQL에서 데이터를 그룹화하여 집계 함수(SUM, COUNT, AVG, 등)와 함께 사용할 때 활용됩니다.
데이터의 특정 기준으로 데이터를 묶어서 각 그룹에 대해 집계 연산을 수행할 수 있게 합니다.
Aggregate Function(집계함수)
COUNT(*) : 행의 수 반환
NULL값을 포함한
COUNT(col_name): 행의 수 반환
NULL값을 제외한
SUM(col_name): NULL값을 제외한 합계 반환
AVG(col_name) : NULL값을 제외한 평균 반환
MAX(col_name) :NULL값을 제외한 최대값 반환
MIN(col_name) :NULL값을 제외한 최소값 반환
STDDEV(col_name) :NULL값을 제외한 표준편차 반환
VARIANCE(col_name) :NULL값을 제외한 분산 반환
GROUP BY + 그룹화할 필드 목록
FROM 및 WHERE절 뒤에 위치
HAVING절
: 집계항목에 대한 세부조건을 지정. GROUP BY 가 없으면 WHERE절처럼 동작
연습문제1
# country 테이블에서 Continent 필드로 그룹화하고,
대륙별 GNP 평균값을 소수점 2자로 반올림하여 조회하고 이름을 avg_GNP로 출력
SELECT
continent,
ROUND(AVG(GNP),2) as avg_GNP
FROM country
GROUP BY continent;
연습문제2
# sales테이블에서 Electronics 카테고리만 포함하고, 카테고리별 총 매출을 조회하는 쿼리문을 출력
SELECT
category,
sum(sales) AS total_sales
FROM sales
WHERE category = 'Electronics'
GROUP BY category;
GROUP BY는 항상 집계함수와 함께 사용
그룹화하려는 컬럼은 반드시 GROUP BY에서 명시되어야함.
SELECT절에 있는 컬럼은 반드시 GROUP BY에 포함된 컬럼이어야 함.
공부는 배울 때 끝나는 게 아니라, 되새기고 활용할 때 완성돼요. 그런 의미에서 오늘 소개한 이야기는 단순한 후기가 아니라, 학습을 더 효과적으로 만들고 나만의 것으로 만드는 과정이었을 거예요. 여러분도 배운 내용을 정리하고, 더 오래 기억하는 습관을 만들어 보세요. 작은 차이가 결국 큰 결과를 만들 테니까요!
내가 배운 것을 글로 정리하는 것이 처음에는 어렵게 느껴질 수도 있지만 멋쟁이사자처럼과 함께 꾸준히 기록하다 보면 스스로 변화하고 있다는 걸 깨닫게 될 거예요. 자! 이제 여러분 차례에요. 언제나 여러분의 곁에는 멋쟁이사자처럼이 있으니 고민하지 말고 배움을 기록하고, 성장의 발자취를 남겨보세요!
홈 : 멋사 부트캠프
멋쟁이사자처럼의 13년 교육 노하우로 IT 취업의 꿈을 현실로!

