프로그래머스SQL 뽀개기!! 일주일동안 매일 하나의 유형 다 뽀개기! 챌린지!
아래의 문제는 프로그래머스 SQL코득점 Kit 내용이며 코드는 직접 푼 내용입니다.
1. 고양이와 개는 몇마리
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회
이때 고양이를 개보다 먼저 조회
SELECT animal_type,count(animal_type) as "count"
from animal_ins
group by animal_type
order by animal_type
결과가 같다고 끝내지말고, 문제의 조건을 다 확인하자!
2. 동명동물수 찾기
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회
이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회
SELECT name, count(name)
from animal_ins
group by name
having count(name)>=2
order by name
count(컬럼) : 널값 제외하고 개수구하기
group by name : 이름으로 묶은 다음에, 그 중에서 조건에 해당하는것 만 조회 -> having
3. 입양시각 구하기1
09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회
이때 결과는 시간대 순으로 정렬
SELECT hour(datetime)as "HOUR",count(datetime) as "COUNT"
from animal_outs
group by hour(datetime)
having HOUR >='9'and HOUR <='19'
order by HOUR
datetime을 시간순으로 묶는게 조금 당황스러웠지만 그냥 무턱대고 hour로 묶어봤다.
그리고 결과엔 7-19로 나와있었는데 다 했다고 착각하고, 또 조건을 놓쳤다.
시간대별로 group by로 묶은다음, 9-19사이니까 having으로 조회한다.
다른풀이
hour을 모를때, substr로 푸는 방법
select hour, count(hour)
from (SELECT substr(datetime,12,2)-0 as hour from animal_outs) hours
group by hour
having hour between 9 and 19
order by hour
- substr(문자열,몇번째부터, 몇글자)
4. 입양시각 구하기2
0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회
이때 결과는 시간대 순으로 정렬
3번이랑 다른점은 시간대의 범위이다.
이전에는 데이터에서 뽑아낸 값들로 변수의 범위를 지정했다면
이번에는 hour변수를 0부터 23까지 직접 만들어야한다.
먼저, 이렇게 변수들만 만들어낼때는 set 을 사용해서 로컬변수를 만든다.
즉, 쿼리문에서 사용할 변수이다. 그럼 hour의 컬럼값으로 0부터 23까지 들어간다.
SET @hour := -1; select (@hour := @hour+1) as "HOUR" from animal_outs where @hour<23
그리고, 다음컬럼에 와야할 값들은 해당시간에 존재하는 값들의 개수이다.
즉,count(*)로 컬럼개수를 세면되는데 로컬변수에 해당하는 시간과 일치하는 where조건을 추가한다
결론적으로 위의 두개의 코드를 합치는 것이다.
최종답은 이렇다.
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
참고 : chanhuiseok.github.io/posts/db-6/
'코딩 테스트' 카테고리의 다른 글
[Programmers] SQL코딩테스트7 | 헤비유저가 소유한 장소 (0) | 2021.05.06 |
---|---|
[Programmers] SQL코딩테스트6 | String,Date (0) | 2021.04.07 |
[Programmers] SQL코딩테스트5 | JOIN (0) | 2021.04.06 |
[Programmers] SQL코딩테스트4 | IS NULL (0) | 2021.04.05 |
[Programmers] SQL코딩테스트2 | SUM,MAX,MIN (0) | 2021.04.04 |
SQL코딩테스트1 | SELECT문 (0) | 2021.04.03 |