일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 코틀린
- MYSQL
- 파이썬
- 문제풀이
- BFS
- 데이터베이스
- 알고리즘
- 회고
- java
- 스프링
- softeer
- C++
- 백준알고리즘
- 소프티어
- 백준 알고리즘
- CJ UNIT
- 정보처리산업기사
- 프로그래머스
- 공부일지
- 자바
- SW봉사
- 백준
- 코딩봉사
- programmers
- 코딩교육봉사
- python
- kotlin
- SQL
- 시나공
- 1과목
- Today
- Total
JIE0025
[프로그래머스] SQL 입양시각 구하기 - GROUP BY, 변수 본문
알고리즘 코테 공부하다가
심심해서 어제 프로그래머스 SQL 몇개 풀었는데
오랜만에 블로그 쓸만한 문제가 있어서 블로그 쓰러 왔다!
(SQL 안본지 오래돼서 기초 문법 빼고 많이 까먹은 상태 ㅎㅎ,,)
문제 SQL - 입양 시각 구하기(2)
이문제는 몇시에 입양이 가장 활발하게 일어나는지 나타내야 하는데
0시부터 23시까지 출력해야한다는 특이점(?) 이 있다.
전체 데이터를 찍어보면 0~6시까지의 데이터는 나오지 않는 것을 확인할 수 있다.
SQL을 안본지 꽤 시간이 지났는데 아주 당황스러운 문제였다.
SQL 문법 - 변수
<변수 선언과 초기화>
SET @변수이름 = 대입값;
SET @변수이름 := eodlqrkqt;
SELECT @변수이름 := 대입값;
SET 이외의 명령문에서 = 은 비교연산자이기 때문에
SELECT 문에서 변수를 선언과 초기화 해줄 때엔 :=을 사용해야 한다.
<변수 사용>
SET @s = 15;
SELECT @f := 15;
SELECT * FROM tbl WHERE id BETWEEN @s AND @f;
이제 문법을 알았으니 문제를 풀어보자.
우리가 구해야하는 것은
몇시에 입양이 가장 활발하게 일어나는지 나타내야 하는데
0시부터 23시까지 출력해야한다는것.
먼저 시간을 0시부터 23시까지 출력해주고,
COUNT에 대한 것은 inner select해서 출력해준다.
1) 시간을 0시부터 23시까지 출력
먼저 hour 라는 변수를 선언하고, -1을 할당해준다음,
SELECT 문에서 1씩 증가시켜주자.
WHERE절에서 @hour이 23이 되기 전까지 동작하므로
@hour 이 22일떄 마지막으로 +1을 해주고, 23을 출력한 후 종료하는 코드이다.
0부터 23까지 잘 나오는것을 확인했다.
그럼 이제 우리 animal_outs 테이블에서 각 hour이 몇번 나오는지 체크하는 쿼리문을 작성하자.
WHERE절을 통해 HOUR(DATETIME) 이 @hour 값일 때 데이터가 몇개인지 COUNT(*)로 세주면 된다.
>> SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour AS "COUNT"
이를 조합하면,
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
코드실행 후 잘 나오는지 확인!
끗!
조만간 bfs dfs 문제 글 쓰러 와야지
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어 (0) | 2022.05.07 |
---|---|
[프로그래머스] 완전탐색 - 모의고사 파이썬 (0) | 2022.05.07 |
[프로그래머스] SQL SELECT 어린 동물 찾기 : WHERE (2) != (0) | 2021.04.05 |
[프로그래머스] SQL SELECT 아픈 동물 찾기 : WHERE (0) | 2021.04.05 |
[프로그래머스] SQL SELECT 역순정렬 : DESC (0) | 2021.04.05 |