일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kaggle #구글 #캐글 #데이터분석플랫폼
- davinciresolve
- Black Magic Design
- 다빈치리졸브
- Spotify가입방법
- SQL튜닝
- datacamp
- 알고리즘
- ITSocial
- #Spotify로돈벌기 #Spotify #PlaylistPush #PlaylistPushCuriator #집에서돈벌기 #집에서돈버는TV #왕초보디지털노마드 #음악플랫폼
- 코딩연습
- 자바
- SQL기초
- GeeksForGeeks
- 퓨어자바스크립트RestAPI
- 데이터분석대회
- SQL
- eksForGeeks
- AjaxCall
- LinkedinBadge
- 완전무료 영상편집기
- 프로그래머스
- digitaltranformation
- 코딩테스트
- 실시간검색어 #구글트랜드 #다양한기능 #파보고연구하자
- jquery없는
- sql공부
- 완전무료
- 내손은로 영상편집하는 솔루션
- 알고리즘공부
- Today
- Total
DLife Planet
[쿼리 공부] [난이도 극악] 중급 4 입양 시각 구하기 (2) (HOUR, TO_CHAR조건에 빈값 0 채우기 PLSQL Set 함수(Mysql), Connect By(Oracle)) 본문
[쿼리 공부] [난이도 극악] 중급 4 입양 시각 구하기 (2) (HOUR, TO_CHAR조건에 빈값 0 채우기 PLSQL Set 함수(Mysql), Connect By(Oracle))
Western_Gem 2020. 11. 19. 11:27전 문제를 완파한 입장에서 총 3번 정도의 고비가 왔던 거 같은데 이번 문제가 첫 번째 고비입니다.
저를 포함한 우리 SQL린이들 파이팅 ㅠ
없는 값을 넣어 주는거라 쉽지 않습니다. 부족한 분석력으로 글을 써볼게요.
[해설]
모든 프로그래머스 SQL 문제들은 테이블 명, 테이블 스키마(테이블의 구성), 쿼리 목표, 그리고 예시로 구성이 됩니다.
(지워져서 다시 올려요)
이 문제에 0~8시, 20~23시 값을 0을 추가하는 문제입니다.
재귀적으로 판단해서 없는 값을 추가하는 방법으로 이 문제는 Mysql과 Oracle 언어마다 풀이법이 다릅니다.
mysql의 경우 SET함수를 써서 @플래그를 달고 변수 선언을 하면 가능합니다.
(뭔 소린지 이해가 안 되신다면.... @hour 플래그를 그냥 변수라고 생각하고 반복문이라 생각하면 편합니다.
[정답]
Mysql 모범 답안.
SET @hour := -1;
SELECT
(@hour := @hour + 1) AS HOUR,
(SELECT COUNT(HOUR(DATETIME)) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) AS COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23;
Oracle 모범 답안
SELECT b.time HOUR, count(ANIMAL_ID) COUNT
from (select lpad(level - 1, 2, 0) time from dual connect by level <= 24) b
inner join
ANIMAL_OUTS a
on b.time = to_char(a.DATETIME(+), 'hh24')
group by b.time
order by b.time
오라클 설명을 첨언하자면
select lpad(level - 1, 2, 0)
time from dual connect by level <= 24
시간을 정의하는 임시테이블 쿼리
on b.time = to_char(a.DATETIME(+), 'hh24')
실제 a테이블의 DATETIME에 있는지 여부를 확인하는 코드입니다.
select 다음의 칼럼은 b.time HOUR, count(ANIMAL_ID) COUNT 최종 목표값이구요.
group by order by 는 뭐 설명 생략할게요
OTL 이래도 이해가 안된다면... 그냥 저 템플릿을 쓰면 될거 같아요. 길이가 중요한게 아니라 가독성이 너무 떨어지네요. 오우 쉣...
하... 쉽지 않습니다. 양삼고백할게요. 이 쿼리는 제가 짠거 아닙니다.
쿼리도 너무 복잡해지고, 그냥 코드레 벨에서 0 값 넣어서 행렬에 추가하는 게 훨씬 나을 거 같네요.
(실무 입장이고요, 코테에선 이런 문제 내면 그냥 엿 먹으라는 소리니까 풀지 말고 다른 거 먼저 푸세요. 풀다가 말리면 다른 거 풀 시간도 없어짐)
'DataScience' 카테고리의 다른 글
[쿼리 공부] 중급 3 입양 시각 구하기 (2) (PLSQL Set 함수(Mysql), Connect By(Oracle)) (0) | 2020.11.19 |
---|---|
[쿼리 공부] 중급 심화 1 이름이 없는 동물의 아이디 (NULL 판독기) (0) | 2020.11.19 |
[쿼리 공부] 중급 2 동명 동물 수 찾기 (Having vs With PLSQL) (0) | 2020.11.19 |
[쿼리 공부] 중급 1 고양이와 개는 몇 마리 있을까? (0) | 2020.11.19 |
[쿼리 공부] 입문 4 중복 제거하기(서브쿼리 not null vs distinct vs Exist) (0) | 2020.11.19 |