SQL

프로그래머스 고득점 Kit | 입양 시각 구하기 (1), 입양 시각 구하기(2) | GROUP BY |

토오오끼 2021. 11. 19. 16:55
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/59412

 

코딩테스트 연습 - 입양 시각 구하기(1)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

입양 시각 구하기 (1)

정답 코드

SELECT HOUR(DATETIME), COUNT(DATETIME) FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) > 8 AND HOUR(DATETIME) < 20
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME);

HOUR()를 사용하면 날짜 시간에서 '시'에 해당하는 시간만 뽑아낼 수 있다.

이를 이용해서 시간이 9시~19시 사이인 것들을 group by로 그룹화 하여 count 하면 된다.


 

입양 시각 구하기 (2)

https://programmers.co.kr/learn/courses/30/lessons/59413

 

코딩테스트 연습 - 입양 시각 구하기(2)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

갑자기 난이도가 확 뛰었다.. 보니까 레벨 4였던...

가지고 있는 지식으로는 도저히 해결할 수 없어서 다른 사람들의 풀이는 많이 찾아봤고 그러다 SET이라는 개념을 알게 되었다.

MySQL에서 SET @변수명 = '값'; 은 SET 명령어에서만 대입 연산자로 인식하기 때문에

대입을 하려면 SET @변수명 := '값'; 으로 :=를 사용해야 한다.

SET은 꼭 뒤에 ;를 붙여야 한다!

 

정답 코드

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

초기 변수값을 -1로 지정, 이후 1씩 더해가면서 SELECT 문 전체를 실행하고, 변수에 해당하는 COUNT값을 출력한다.

HOUR의 값은 0시부터 23시까지 출력 되어야 하므로  WHERE 조건을 추가하여 변수의 값을 조정하면 된다.

 

 

굉장히.. 낯설고 어려운 개념인 것 같다.. 이해하기도 어려웠고..

 ㅠㅠ


입양 시각 구하기 (1) 풀이 코드

 

GitHub - YOOHYOJEONG/SQL_study: SQL Challenge

SQL Challenge. Contribute to YOOHYOJEONG/SQL_study development by creating an account on GitHub.

github.com

 

입양 시각 구하기 (2) 풀이 코드

 

GitHub - YOOHYOJEONG/SQL_study: SQL Challenge

SQL Challenge. Contribute to YOOHYOJEONG/SQL_study development by creating an account on GitHub.

github.com

 

728x90
반응형