본문 바로가기
개발자의 개발개발한 하루/프로그래머스

[프로그래머스 SQL 고득점 Kit] Level 2, 4 Group by 코드 풀이 4문제

by ju니어 2021. 8. 23.
728x90
반응형

1. 고양이와 개는 몇 마리 있을까

문제 간단 정의

동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

SELECT animal_type, count(*) as "count"
FROM animal_ins
GROUP BY animal_type
ORDER BY animal_type;

컬럼명을 그대로 쓰지 않고 별칭을 쓰려고 하면, as "별칭" 형태로 사용하면 된다.

 

 

2. 동명 동물 수 찾기

문제 간단 정의

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

SELECT name, count(name) as "COUNT"
FROM animal_ins
GROUP BY name
HAVING count(name) >= 2
ORDER BY name;

 

 

3. 입양시각 구하기(1)

문제 간단 정의

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

SELECT hour(datetime) as "HOUR", count(hour(datetime))
FROM animal_outs
WHERE hour(datetime) >= 9 and hour(datetime) <= 19
GROUP BY hour(datetime)
ORDER BY hour(datetime);

 

 

4. 입양시각 구하기(2)

문제 간단 정의

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

SET @HOUR := -1;
SELECT (@HOUR := @HOUR + 1) HOUR, (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR ) COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23

변수를 사용해서 문제를 풀었다.

set을 통해 @변수명 = 초기화할 값 형태로 정의하였고,

where을 if문처럼 @HOUR이 23보다 작을 때 까지 

Select (@HOUR := @HOUR + 1)로 반복해서 출력하게 된다.

 

여기서 중요한 건, = 와 :=의 구별이다.

  • = -> 대입연산자, 비교연산자
  • := -> SELECT @변수명 을 사용시 := 로, 대입연산자 역할

 

[set @변수명 := 초기화할 값]을 해도 되고, [set @변수명 = 초기화할 값]을 해도 되는데

변수를 정의했다는 것을 명시적으로 나타내기 위해서 변수를 초기화할 때 :=을 사용한다.

 

다만 select~from 쿼리에서는 = 이 대입연산자가 아닌 비교연산자로 사용되기 때문에, 변수로 사용하기 위해 대입연산자를 쓰려면 :=로 나타내야 한다.

 

 

 

 

 

https://programmers.co.kr/learn/courses/30/parts/17044

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

반응형

댓글