본문 바로가기
SQL

[SQL] 프로그래머스 고득점 kit - GROUP BY / 고양이와 개는 몇 마리 있을까

by pearhyunjin 2024. 3. 15.

 

 

프로그래머스 SQL 고득전 kit를 풀어보고 정리한 내용입니다.

맞춘 정답과 틀린 경우 생각해내지 못한 문법 위주로 작성하였습니다.

정리 내용 출처는 아래를 참고해 주세요.

 


 

Lv.2 고양이와 개는 몇 마리 있을까

 

 

 

처음 작성 답안

 

GROUP BY를 이용해 ANIMAL_TYPE을 기준으로 그룹화 시키고 -> ANIMAL_TYPE에 따라 각각 강아지와 고양이로 그룹화 됨

그룹화된 해당 ANIMAL_TYPE을 기준으로 컬럼 선택한다.

이때, COUNT 컬럼명을 붙여 그룹화된 데이터의 개수를 각각 구해준다.

SELECT
    ANIMAL_TYPE, 
    COUNT(*) AS COUNT
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE;

 

 

추가 답안

 

WHERE 구문만 사용해 각각 ANIMAL_TYPE이 고양이, 강아지인 경우로 나누어 SELECT 구문을 구하고 UNION 시켜준다.

SELECT
    ANIMAL_TYPE,
    COUNT(*) AS COUNT
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = "Cat"
UNION
SELECT
    ANIMAL_TYPE,
    COUNT(*) AS COUNT
FROM ANIMAL_INS
WHERE ANIMAL_INS = "Dog";

 

 


 

GROUP BY

데이터를 특정 컬럼 기준으로 그룹화시키는 명령어.

  • 그룹을 나누고 다시 그 그룹 안에서 세부그룹으로 나눌 수 있다 
    GROUP BY COL1, COL2 ⇒ COL1안에서 다시 COL2로 나누기 가능
  • 각 그룹에 대한 연산 결과(합, 평균, 갯수 등)를 산출하기 위해서는 집계함수가 필요
  • GROUP BY 구에 있는 컬럼은 반드시 SELECT 절에도 존재해야 한다
  • GROUP BY 구에도 다양한 함수 사용 가능하다 (SUBSTR, INSTR 등등..)
  • 그룹 함수
    하나 이상의 행을 그룹으로 묶어 연산하기 위한 함수로, GROUP BY를 기준으로 각 그룹을 연산한다.
    COUNT - 행의 개수 연산 - NULL 포함 연산
    SUM - 합계 - NULL 제외 연산
    AVG - 평균 - NULL 제외 연산 (포함하고 싶다면 NULL 데이터를 0으로 채워 연산)
    MAX - 최댓값 - NULL 제외 연산
    MIN - 최솟값 - NULL 제외 연산
    STDDEV - 표준편차 - NULL 제외 연산
    VARIANCE - 분산 - NULL 제외 연산

 

HAVING 

GROUP BY 절에 대한 조건을 걸고 싶을 때 사용하는 명령어

  • 그룹화 된 결과에 조건을 걸어주는 역할
  • HAVING 뒤에는 SELECT 구문에서 사용하는 AS 별칭 사용 불가

 

ORDER BY

테이블을 특정 컬럼값을 기준으로 정렬하기 위한 명령어

  • 여러개 컬럼을 기준으로 정렬 가능
    ex) ORDER BY COL1, COL2...
  • 기본 정렬값은 ASC(오름차순)로 설정되어있으므로 오름차순 정렬시에는 입력 필요 X, 내림차순의 경우 DESC
  • SELECT절의 컬럼 순서 혹은 별칭으로도 정렬 가능ex) ORDER BY 1, 2,...

 

UNION

2개 이상 테이블에 존재하는 같은 성격의 값을 하나의 쿼리로 추출하는 것

  • 컬럼명이 동일해야 한다 -> 같지 않을 경우 AS 를 이용해서 동일하게 맞춰줘야 한다
     단, 별칭 입력은 UNION을 사용하기 전에 이뤄져야함
  • 컬럼별로 데이터 타입이 동일해야 한다.
  • 출력할 컬럼의 개수가 동일해야 한다.
  • UNION DISTINCT / UNION -> 중복되지 않은 값만 추출
  • UNION ALL -> 중복 허용하고 모든 값 추출

 

UNION VS JOIN

  • JOIN : 새로운 열로 결합한다. (수평결합)
  • UNION : 새로운 행으로 결합한다. (수직결합)

 

 

 

 


* https://velog.io/@genieee/GROUP-BY-HAVING-ORDER-BY-%EA%B0%84%EB%8B%A8-%EC%A0%95%EB%A6%AC