본문 바로가기

데일리

[23.11.04~05] 주말동안 프로그래머스 MYSQL 코테 전 문제 풀고 난 후기

글의 목적

  • 프로그래머스 MYSQL문제에 대한 느낌을 좀 정리해 두려고.
  • 문제를 풀면서 공부해야할 키워드들을 정리해두고 하나씩 익숙하게 만들어갈 예정

본론

  • 문제는 최대한 서브쿼리를 지양하고 INNER JOIN같은 경우는 WHERE 절로 INDEX들을 JOIN해서 풀었음.
  • 총 76문제였는데 서브쿼리는 마지막에 4단계 5단계에서 서브쿼리를 쓸수밖에 없는 문제들이 있었음. 한 5문제 빼고는 다 JOIN으로 해결함.
  • 너무 쉬운 키워드는 제외하고 기억해둘 만한 것들을 정리하려고 함.
    1. ORDER BY디폴트값 오름차순(ASC) 내림차순(DESC)
    2. CASE WHEN THEN ELSE END
    3. DATE_FORMAT("%Y-%m-%d")
      • 프로그래머스는 이걸 정말 좋아한다........
    4. JOIN(LEFT, RIGHT, SLEF등등 전부 알아두면 좋음.)
    5. WHERE과 ID값으로 조인(JOIN 명령어 없이 INDEX를 활용한 JOIN, 예전부터 나는 이게 좀 편하다)
    6. WHERE IN ('', '')
    7. WHERE LIKE '%D%'
      • 특정지역의 DATA를 추출할때는 '%서울%'이 아닌 '서울%'로 해야한다.
        EX) 경기 과천시 광명로 181 서울랜드는 서울이 아닌데 뽑히기 때문!!! ^.^
    8. WHERE IS NOT NULL
    9. COUNT(개수), SUM(총합), AVG(평균) GROUP BY(묶음)
    10. ROUND(반올림)
      • ROUND(TABLE, 1) 뒤에 숫자는 해당 소수점 반올림을 뜻함. 숫자 안써도 됨. 안쓰면 첫째자리에서 반올림.
    11. HAVING
    12. (PRICE-PRICE%10000)0, 10000, 20000 ~
    13. LEFT JOIN으로 그룹별 LIMIT 뽑기
    14. GROUP BY SUM으로 조건별 합치기
    15. 이중정렬 ORDER BY AA DESC, BB ASC
    16. GROUP BY HANVING COUNT(*) >
    17. IF문
    18. YEAR, MONTH
    19. DATEDIFF(날짜, 날짜)+1
    20. 셀프조인의 중복처리와 중복활용
    21. GROUP_CONCAT
    22. 서브쿼리
      • 어쩔수 없이 SUBQUERY를 써야하는 경우가 있음.(특정값 이상의 ID만 따로 정렬해야한다던지, 그럼 특정값에 해당하는것을 먼저 뽑을 수밖에 없음.)
    23. UNION, UNION ALL
    24. CTE, WITH RECURSIVE (재귀 쿼리)
    25. IFNULL
    26. 3개 이상의 테이블의 조인은 필요한것먼저, 3개 이상을 한번에 할 필요가 없음.

결론

  • 프로그래머스 MYSQL문제를 주말동안 다 풀어봤는데 생각보다 재밌었다.
  • 정답률이 높은 순서로 풀었는데 뒤에 정답률이 낮은 문제는 왜 낮은지 알 것 같았다.
  • 너무 말이 모호하고 애매하다. 문제파악하는게 더 시간이 오래걸릴 정도....
  • 이게 이런 말이었어? 라는 문제도 종종 있다.
  • 그래도 SQL 쿼리가 더 익숙해졌다.
  • 정답 쿼리만 깃에 업로드할지 말지 고민중이다. o.o
  • 정리 했다.