프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 고양이와 개는 몇 마리 있을까
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 출력하는 문제이다. (고양이, 개 순서)
동물을 종류에 따라 묶기 위해 group by 절을 사용했다.
SELECT ANIMAL_TYPE, COUNT(*) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
문제에서는 고양이와 개라고 특정 지었지만 group by 절을 사용하여 출력하니 정답으로 처리돼었다. 이방법으로 되지않았다면 where절을 사용하여 고양이와 개의 수를 각각 구한 후 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_TYPE = "Dog"
2. 동명 동물 수 찾기
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 출력하는 문제이다. 이때 이름이 없는 동물은 집계에서 제외한다.
group by로 그룹으로 나눈 후 그 수가 2 이상이어야 하므로 having절을 사용했다.
SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT > 1
ORDER BY NAME
name 컬럼이 null인 레코드를 집계에서 제외하기 위해서 count( )에 컬럼명 name을 넣었다.
그룹의 수가 2 이상인 즉 1보다 크다는 조건이 있으므로 having count > 1을 썼다.
* 이때 where count > 1이 되면 그룹을 만들기 이전에 검사하기 때문에 문제에서 원하는 결과를 낼 수 없다. 이 문제에서는 where절에서 count를 사용할 수 없기 때문에 실행조차 되지 않는다.
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블이다.
3. 입양 시각 구하기(1)
이 문제에서는 ANIMAL_OUTS 테이블을 사용했다.
동물 보호소에서 9시부터 19시까지 각 시간대 별로 입양이 몇 건 발생했는지 출력하는 문제이다.
SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR >= 9 && HOUR < 20
ORDER BY HOUR
날짜 형식의 입양일에서 시간만 사용하기 위해 hour( )를 사용해서 원하는 시간만 뽑아내 hour 컬럼으로 만들었다.
이후 hour 컬럼에 대해서 그룹을 만들고 hour의 조건이 주어지기 때문에 having절을 사용했다.
4. 입양 시각 구하기(2)
이 문제에서도 ANIMAL_OUTS 테이블을 사용했다.
동물 보호소에서 0시부터 23시까지 각 시간대 별로 입양이 몇 건 발생했는지 출력하는 문제이다.
SET @HOUR_IT := -1;
SELECT @HOUR_IT := @HOUR_IT+1 AS 'HOUR',
(SELECT COUNT(*)
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) = @HOUR_IT) AS 'COUNT'
FROM ANIMAL_OUTS
WHERE @HOUR_IT < 23;
COUNT만을 사용하는 경우 0인 결과에 대해서는 출력하지 않기 때문에 SET을 사용하여 변수 HOUR_IT를 만든 이후 사용했다.
HOUR에 HOUR_IT라는 변수를 사용하여 0부터 23까지 넣고, COUNT에는 HOUR(DATETIME)과 HOUR_IT가 일치하는 레코드의 수를 센 후 값을 넣었다.
'문제풀이 > 프로그래머스 SQL Kit' 카테고리의 다른 글
프로그래머스 SQL 고득점 Kit - 5. STRING, DATE (0) | 2020.04.03 |
---|---|
프로그래머스 SQL 고득점 Kit - 3. IS NULL (0) | 2020.04.01 |
프로그래머스 SQL 고득점 Kit - 2. SUM, MAX, MIN (0) | 2020.03.31 |
프로그래머스 SQL 고득점 Kit - 1. SELECT (0) | 2020.03.30 |