프로그래머스 SQL GROUP BY 문제를 모아서 정리하였습니다.
문제1. 고양이와 개는 몇 마리 있을까 - 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
GROUP BY를 사용하면 동일한 이름의 데이터가 묶여서 나온다. 여기서 COUNT를 해주면 각 데이터의 갯수를 구할 수 있다.
문제2. 동명 동물 수 찾기 - 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
SELECT NAME,COUNT(NAME)
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME
HAVING은 그룹화 한 후 이를 기반으로 조건에 맞는 데이터를 추출한다.
NULL은 1보다 크다는 조건에 부합하지 않아 자동으로 걸러지지만, 식을 추가하고 싶다면WHERE NAME is NOT NULL
을 FROM 다음에 추가하면 된다.
조건문 참고 블로그
문제3. 입양 시각 구하기(1) - 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
SELECT HOUR(DATETIME) AS HOUR, COUNT(HOUR(DATETIME)) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR > 8 AND HOUR < 20
ORDER BY HOUR
HOUR을 통해서 시간만 따로 뺴낼 수 있었다.
HAVING에 변수로 사용하려면 따로 이름을 지정해주어야되더라.HAVING HOUR BETWEEN 9 AND 19
으로도 사용 가능하다.
문제4. 입양 시각 구하기(2) - 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
몰라서 이분 블로그를 보고 작성하였습니다.
SET @hour := -1;
SELECT (@hour := @hour+1) AS HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) AS COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23
SET을 통해 변수를 선언할 수 있다.
(@hour := @hour+1) - 1씩 증가하면서 표시해준다.
@hour 과 동일할때 데이터 수를 카운트 해주었다.
'SQL' 카테고리의 다른 글
[프로그래머스] SQL- JOIN 관련 모든 문제 (0) | 2021.10.24 |
---|---|
[프로그래머스] SQL- String, Date 관련 모든 문제 (0) | 2021.10.22 |
[프로그래머스] SQL- IS NULL 관련 모든 문제 (0) | 2021.10.20 |
[프로그래머스] SQL-SUM,MAX,MIN 관련 모든 문제 (0) | 2021.10.18 |
[프로그래머스] SQL-SELECT 관련 모든 문제 (0) | 2021.10.18 |