SQL/MySQL - 프로그래머스

[Lv.2] 중복 제거하기 [count, distinct]

셈뇽 2024. 5. 6. 02:26
문제 파악
  • 출력할 컬럼 : 동물 이름의 갯수 ⇒ SELECT
  • 데이터를 가져올 테이블 : ANIMAL_INS ⇒ FROM
  • 문제 조건 : 중복 누적 x, null값도 집계 x ⇒ ???

 

문제 해결 과정

 

💡 Distinct

✅ 중복되는 데이터가 있다면, 하나만 count (중복 제거해라!)

SELECT DISTINCT 컬럼 FROM 테이블;
중복이 제거되어 unique 값만 출력

주의사항

⇒ MySQL에서는 DISTINCT 할 때 ( )의 의미가 없다. 한 개의 컬럼에만 적용하고 싶다면, GROUP BY를 사용

########### DISTINCT ###############
## 이렇게 하면 의도하지 않은 결과가 출력될 것.
SELECT DISTINCT (U.USERID), U.NAME, U.ADDR, B.PRODNAME
FROM BUYTBL B INNER JOIN USERTBL U
ON B.USERID = U.USERID;

# U.USERID의 유니크 값을 기준으로 정렬하고 싶다면, GROUP BY 사용하기!!! 
SELECT U.USERID, U.NAME, U.ADDR, B.PRODNAME
FROM BUYTBL B INNER JOIN USERTBL U
ON B.USERID = U.USERID
GROUP BY U.USERID;
첫 번째/두 번째 코드 실행 결과

 

 

💡 Count

✅ 갯수를 세어주는 집계함수

→ 아래 게시글 참고! 

 

동명 동물 수 찾기 [group by, having]

문제 파악 출력할 컬럼 : 동물의 이름, 이름이 쓰인 횟수 ⇒ SELECT 데이터를 가져올 테이블 : ANIMAL_INS ⇒ FROM 조회 순서 : 이름 순 ⇒ ORDER BY 집계할 내용 : 이름이 없는 동물을 제외하고, 이름이 쓰

seheehee.tistory.com

 

 

 

🌟 (ISSUE) where로 Null 조건을 걸지 않았는데 정답처리?!

→ 제 생각엔 데이터에 null 값이 없었던 것 같아요!

  • null은 distinct로 제거가 될까? ⇒ NO!!!!!! Null도 하나의 unique값으로 간주되어 where절로 조건을 걸지 않으면 count에 포함된다.

 

문제 해결

 

> 완성 코드

## 답안 확인
# name의 unique값을 세어 count 변수로 출력

SELECT count(distinct(name)) as count
from animal_INS;