사전캠프 8일차
게임서버 개발 부트캠프
TIL(Today I Learned) - 오늘의 공부
팀 공부 아티클 스터디
- SQL의 종류와 특징에 대해 알아보는 시간을 가졌다.
엑셀보다 쉽고 빠른 SQL 5주차까지 완강 및 과제 제출을 하였다
- 4주차 내용
SubQuery 와 JOIN 에 대한 사용 방법을 배웠다.
/*
서브 쿼리는 쿼리의 내부 속 쿼리를 뜻하며,
이를 이용하여 연산을 분배하여 식을 간략화 할 수 있다.
*/
SELECT column1
, special_column
FROM
(
SELECT column1
, column2 special_column
FROM table1
) a
/*
JOIN은 공통된 컬럼을 가진 두 테이블을 합쳐주는 명령어다.
JOIN을 통해 두 테이블을 동시에 참조할 수 있게 된다.
JOIN의 종류는 2개로 첫번째 테이블의 모든값을 불러오는 LEFT와 두 테이블의 겹치는 열들만을 가져오는 INNER 가 있다.
*/
-- LEFT JOIN
SELECT 조회 할 컬럼
FROM 테이블1 a
LEFT JOIN 테이블2 b
ON a.공통컬럼명=b.공통컬럼명
-- INNER JOIN
SELECT 조회 할 컬럼
FROM 테이블1 a
INNER JOIN 테이블2 b
ON a.공통컬럼명=b.공통컬럼명
- 5주차 내용
SQL을 이용하여 피벗테이블 형태로 변환하는 방법과 Window Function(RANK/SUM) 을 배웠다.
-- 피벗 테이블화 예시
-- MAX 함수를 쓰는 이유는 IF문을 모든 열들이 순회하기 때문에 0값이 지속적으로 들어가는걸 막는 이유로 쓰는 것 같다.
SELECT restaurant_name
, MAX(IF(hh='15', cnt_order, 0)) "15"
, MAX(IF(hh='16', cnt_order, 0)) "16"
, MAX(IF(hh='17', cnt_order, 0)) "17"
, MAX(IF(hh='18', cnt_order, 0)) "18"
, MAX(IF(hh='19', cnt_order, 0)) "19"
, MAX(IF(hh='20', cnt_order, 0)) "20"
FROM
( -- 서브 쿼리를 이용하여 사용할 데이터들을 미리 정리해준다.
SELECT a.restaurant_name
, SUBSTRING(b.time, 1, 2) hh
, COUNT(1) cnt_order
FROM food_orders a
INNER JOIN payments b
ON a.order_id=b.order_id
WHERE SUBSTRING(b.time, 1, 2) BETWEEN 15 AND 20
GROUP BY 1, 2
) a
GROUP BY 1
ORDER BY 7 DESC
-- 기본 예시 / ORDER BY는 생략 가능하다
Window_Function(변수) OVER (PARTITION BY 그룹 기준 컬럼 ORDER BY 정렬 기준)
-- RANK 함수
RANK() OVER (PARTITION BY 그룹 기준 컬럼 ORDER BY 정렬 기준)
-- SUM 함수
SUM(변수) OVER (PARTITION BY 그룹 기준 컬럼 ORDER BY 정렬 기준)
TIL(Today I Learned) - 학습 과정 중 특이사항
-
오늘 아티클 스터디를 마치면서 추가로 다음 주제에 대해서도 다같이 생각해 볼 수 있어 좋았다.
-
SQL 강의를 완강하는데 시간이 부족할 것 같아 조금 빠르게 봤음에도 공부 시간을 넘겨서 정리를 하게 되었다.
-
주도적으로 아티클 스터디 주제를 찾아보는게 조금 즐겁다고 느껴졌다!