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