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 강의를 완강하는데 시간이 부족할 것 같아 조금 빠르게 봤음에도 공부 시간을 넘겨서 정리를 하게 되었다.

  • 주도적으로 아티클 스터디 주제를 찾아보는게 조금 즐겁다고 느껴졌다!