[코테] 프로그래머스 SQL 고득점 Kit - SUM, MAX, MIN 10번

ʕ•ﻌ•ʔ·2024년 4월 16일
0

코딩테스트 (SQL)

목록 보기
27/31

❇️ SUM,MAX,MIN

  • 💡 합계
    • select max(열) from 테이블;
      - 열의 최댓값 출력

  • 💡 중복
    • select distinct 열 from 테이블;
      - 열의 중복 제거

  • 💡 그룹
    • select 열1, 열2 from 테이블 join ... group by 열1, 열2;
      - 그룹화할 때 (group by) select에 기재된 열을 모두 다 써야함
      - 단, 집계함수 사용 열은 굳이 그룹화에 할 필요X
      - 그룹화(+집계함수) 열 말고 다른 열도 출력하고 싶으면 where로 SELECT 2개 구문 연결
      - select 다른 열, 열1, 열2 from 테이블 join ... where (열1, 열2) in (select ...)

  • 💡 문자열 결합
    • select concat (열1,문자) from 테이블
      - 결과 : 열1문자로 문자가 결합되어 나옴

  • 💡 연도 구하기 new!
    • select year(날짜열) from 테이블
      • 결과 : 연도만 문자형으로 나옴
    • select date_format(날짜열, ' %Y')
      • 결과 : 연도만 날짜형으로 나옴

1. SUM, MAX, MIN 10번

연도별 대장균 크기의 편차 구하기

⚠️ 이 문제에서 연도 = 문자열로 출력해야함에 주의 !!

  • (1) 연도별 가장 큰 대장균 사이즈 구하기

    • 연도 그룹화 → 그룹 중 가장 큰 사이즈 구하기
      SELECT YEAR(DIFFERENTIATION_DATE) AS YEAR, MAX(SIZE_OF_COLONY) AS YEAR_MAX FROM ECOLI_DATA GROUP BY YEAR
  • (2) JOIN

    • 동일한 연도에 대해 가장 큰 사이즈 붙이기
      SELECT O.연도, 최대-현 대장균 사이즈, O.ID FROM ECOLI_DATA AS O INNER JOIN ( 1번 구문 ) AS M ON O.연도 = M.연도
  • (3) YEAR_DEV(최대-현 대장균 사이즈) 계산

    • YEAR = YEAR(O.DIFFERENTIATION_DATE) AS YEAR
    • YEAR_DEV = M.YEAR_MAX-O.SIZE_OF_COLONY
    • JOIN 기준 = ON YEAR(O.DIFFERENTIATION_DATE) = M.YEAR

SELECT YEAR(O.DIFFERENTIATION_DATE) AS YEAR, M.YEAR_MAX-O.SIZE_OF_COLONY AS YEAR_DEV, O.ID
FROM ECOLI_DATA AS O
INNER JOIN (
    SELECT YEAR(DIFFERENTIATION_DATE) AS YEAR, 
    MAX(SIZE_OF_COLONY) AS YEAR_MAX 
    FROM ECOLI_DATA 
    GROUP BY YEAR
) AS M 
ON YEAR(O.DIFFERENTIATION_DATE) = M.YEAR
ORDER BY YEAR, YEAR_DEV;
profile
김햄톨

0개의 댓글

관련 채용 정보