CodingTest Practice/Programmers

프로그래머스 : GROUP BY (SQL, ORACLE)

몽땅마니아(MDD) 2022. 6. 6. 15:51

https://programmers.co.kr/learn/courses/30/lessons/59040?language=oracle 

 

코딩테스트 연습 - 고양이와 개는 몇 마리 있을까

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

-- 코드를 입력하세요
SELECT ANIMAL_TYPE,COUNT(*) as count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE;

 

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

 

코딩테스트 연습 - 동명 동물 수 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

-- 코드를 입력하세요
SELECT NAME, COUNT(*) AS count
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME;

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

MySQL에서는 DATE_FORMAT을 이용했는데 ORACLE에서는 TO_CHAR를 이용해 24시간 표시( TO_CHAR(DATETIME, 'HH24') ) 를 구할 수 있었다.

-- DATETIME의 24시간 표시법을 이용해 
SELECT TO_CHAR(DATETIME, 'HH24'), COUNT(*)
FROM ANIMAL_OUTS
WHERE TO_CHAR(DATETIME, 'HH24') >= '09' AND TO_CHAR(DATETIME, 'HH24') <= '19'
GROUP BY TO_CHAR(DATETIME, 'HH24')
ORDER BY TO_CHAR(DATETIME, 'HH24');


---인라인 뷰를 이용해 쿼리문을 더욱 간결하게
SELECT HOUR, COUNT(*)
FROM (
    SELECT TO_CHAR(DATETIME, 'HH24') AS HOUR
    FROM ANIMAL_OUTS
)
WHERE HOUR >= '09' AND HOUR <= '19'
GROUP BY HOUR
ORDER BY HOUR;

https://programmers.co.kr/learn/courses/30/lessons/59413?language=oracle 

 

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

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

programmers.co.kr

이 문제는 너무 어려웠다... 전에 mySQL로 풀었을 때도 너무 어려웠다..

그래서 아래 블로그를 참고했고 계층형 쿼리를 이용해 문제를 풀 수 있었다.

https://heestory217.tistory.com/8

 

[Oracle] 프로그래머스 - 입양 시각 구하기 (1), (2)

1. 입양 시각 구하기(1) 문제설명 ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME..

heestory217.tistory.com

SELECT HOUR, COUNT(OUTS.DATETIME) AS COUNT
FROM (
    SELECT LEVEL-1 AS HOUR FROM DUAL CONNECT BY LEVEL <=24
)
LEFT JOIN ANIMAL_OUTS OUTS
ON HOUR =  TO_CHAR(OUTS.DATETIME,'HH24')
GROUP BY HOUR
ORDER BY HOUR;