SQL

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

pearhyunjin 2024. 3. 15. 10:07

 

 

프로그래머스 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