[SQL] SQL TIL 서브쿼리, DATE_FORMAT(), 피벗 테이블

Sophie·2024년 10월 21일

[TIL] SQL 지난 강의 복습 / DATETIME에서 DATE로 형 변환 / SQL 피벗 테이블

1. SQL 지난 강의 복습

  • 복습
    • subquery
      • 기본 형식
        select col1, special_col
        from
        	(select col1, col2 special_col
        	from table1
        	)a
    • join (LEFT JOIN & INNER JOIN)
      • 기본 형식
        select col1
        from table1 t left join table2 a on t.colA = a.colA
        
        select col1
        from table1 t inner join table2 a on t.colA = a.colA
    • Null 제외하기
      • where 테이블명.컬럼명 is not null

        select a.order_id,
               a.customer_id,
               a.restaurant_name,
               a.price,
               b.name,
               b.age,
               b.gender
        from food_orders a left join customers b on a.customer_id=b.customer_id
        where b.customer_id is not null

2. DATETIME에서 DATE로 형 변환

  • 프로그래머스 연습
    • 문제 : ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜1를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.
    • 핵심 문법 : DATE_FORMAT(컬럼명, '%Y-%m-%d')
    • 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/59414
    • 답안:
  SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS 날짜
  FROM ANIMAL_INS
  ORDER BY ANIMAL_ID
-> SELECT 에서 DATETIME을 안바꾸고 그대로 가져와서 틀렸었다.
DATE_FORMAT() 을 사용해서 연-월-일로 형 변환

3. SQL 피벗 테이블

  • SQL 로 피벗 테이블 만들기
    - 실습 예시
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 --> restaurant_name 과 hh 로 group by --
) a
group by 1 -- restaurant_name 으로 다시 한번 더 group by; max와 쌍이라고 생각 --
order by 7 desc -- 7번째 열인 "20" (hh='20') 으로 descending --

0개의 댓글