코딩테스트 연습_0728

starlikedh
|2021. 7. 28. 22:13

프로그래머스 SQL 고득점 KIT 풀어보기_2

GROUP BY > 동명 동물 수 찾기
문제: 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 
이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

풀이: 이름 없는 동물은 집계에서 제외해야 하므로 WHERE절에 IS NOT NULL조건 걸어주기.
횟수 구해야하니까 COUNT함수 써주고 이름 순 조회라 ORDER BY는 NAME으로.
GROUP BY절에 이름으로 묶어주고 두 번 이상 쓰인거니깐 HAVING절에 카운트가 1보다 클 때로.
이번 문제 같은 경우는 MySQL로 풀어보았다ㅎㅎ

SELECT NAME, COUNT(NAME) AS 'COUNT'
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME ASC;

IS NULL > NULL 처리하기
문제: 입양 게시판에 동물 정보를 게시하려 합니다. 
동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 
이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.

풀이: 아이디 순으로 조회해야 하기 때문에 ORDER BY절에 해당 내용 작성해주기.
이름이 NULL일 경우 문자열로 대체해야하기 때문에 NVL함수로 처리.

SELECT ANIMAL_TYPE, NVL(NAME, 'No name'), SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;

JOIN > 없어진 기록 찾기
문제: 천재지변으로 인해 일부 데이터가 유실되었습니다. 
입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.

풀이: 우선 두 테이블명을 A, B로 간략화해주고 공통 키인 ANIMAL_ID로 JOIN해주기.
들어온 기록이 없는 것은 들어온 것은 IN이므로 ANIMAL_ID가 IS NULL인 조건 걸어주기.

SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_INS A RIGHT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.ANIMAL_ID IS NULL
ORDER BY B.ANIMAL_ID;

 

'Database' 카테고리의 다른 글

해커랭크 SQL문제_0802  (0) 2021.08.02
코딩테스트 연습_0729  (0) 2021.07.29
코딩테스트 연습_0723  (0) 2021.07.23
해커랭크 SQL문제_0722  (0) 2021.07.22
해커랭크 SQL문제_0721  (0) 2021.07.21