일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 파이게임
- 스프링부트 채팅서버
- 프로그래머스
- SQL프로그래머스
- 자바8
- 오라클
- 스프링부트
- oracle
- 자바스크립트
- springboot
- pygame
- Leetcode
- 스프링
- mysql
- spring boot
- java8
- SQL 문제풀이
- 구글로그인
- LeetCode SQL
- kotlin 클래스
- python
- Spring
- oauth2
- 자바 스트림
- 코틀린 클래스
- SQL
- MSA
- js
- 스프링시큐리티
- javascript
Archives
- Today
- Total
웅겹살의 프로그래밍 삼매경
[SQL] 프로그래머스 입양 시각 구하기(2) ORACLE, MYSQL 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/59413?language=oracle
입양 시각 구하기(1) 의 심화버전이다
1. ORACLE
가상테이블 2개 만들어서 LEFT OUTER JOIN시켜서 뽑아냈다
첫번째 가상테이블은 00시부터 23시까지 HOUR를 뽑아내다.
참고한 블로그 url 첨부한다.
https://meyouus.tistory.com/175
두번째 테이블은 입양 시각 구하기(1) 에서 HOUR와 COUNT를 뽑아낸 쿼리를 재사용했다.
WITH SET_HOUR AS
(
SELECT LEVEL - 1 as HOUR FROM DUAL CONNECT BY LEVEL <= 24
)
, SET_COUNT AS
(
SELECT
TO_CHAR(DATETIME, 'HH24') AS HOUR
,COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY TO_CHAR(DATETIME, 'HH24')
)
SELECT
H.HOUR
,NVL(C.COUNT,0) COUNT
FROM
SET_HOUR H
LEFT OUTER JOIN SET_COUNT C ON H.HOUR = C.HOUR
ORDER BY H.HOUR
2. MYSQL
mysql은 2가지 방법으로 성공했다.
- WITH RECURSIVE 활용
mysql에서 오라클의 connect by level을 사용할 방법을 찾아보니까 WITH RECURSIVE을 사용하는 방법도 있다.
하단에 참고한 url 첨부한다.
https://aljjabaegi.tistory.com/549
WITH RECURSIVE SET_HOUR AS (
SELECT 0 AS HOUR
UNION ALL
SELECT 1 + SET_HOUR.HOUR
FROM SET_HOUR
WHERE SET_HOUR.HOUR < 23
)
, SET_COUNT AS
(
SELECT
HOUR(DATETIME) AS HOUR
,COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
)
SELECT
H.HOUR
,IFNULL(C.COUNT,0) COUNT
FROM
SET_HOUR H
LEFT OUTER JOIN SET_COUNT C ON H.HOUR = C.HOUR
ORDER BY H.HOUR
- SET변수와 LIMIT 활용
SET으로 변수선언하고 LIMIT을 걸어줘서 HOUR 뽑았다.
COUNT는 ORACLE과 동일하게 작성
SET @LEVEL = -1;
WITH SET_HOUR AS
(
SELECT @LEVEL := @LEVEL + 1 AS HOUR FROM ANIMAL_OUTS LIMIT 24
)
, SET_COUNT AS
(
SELECT
HOUR(DATETIME) AS HOUR
,COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
)
SELECT
H.HOUR
,IFNULL(C.COUNT,0) COUNT
FROM
SET_HOUR H
LEFT OUTER JOIN SET_COUNT C ON H.HOUR = C.HOUR
ORDER BY H.HOUR
728x90
'SQL > SQL 문제풀이' 카테고리의 다른 글
[SQL] LeetCode SQL 182. Duplicate Emails (0) | 2021.11.29 |
---|---|
[SQL] 고양이와 개는 몇 마리 있을까 (0) | 2021.07.06 |
[SQL] 프로그래머스 입양 시각 구하기(1) (2) | 2021.07.04 |
[SQL] 프로그래머스 오랜 기간 보호한 동물(2) (0) | 2021.01.28 |
[SQL] 프로그래머스 DATETIME에서 DATE로 형변환 (0) | 2021.01.28 |
Comments