Bamboo is coming

프로그래머스 SQL 고득점 Kit <GROUP BY> 본문

PS

프로그래머스 SQL 고득점 Kit <GROUP BY>

twenty 2022. 3. 20. 17:20

<GROUP BY>

1. 고양이와 개는 몇 마리 있을까

SELECT ANIMAL_TYPE,COUNT(*) FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE

- GROUP BY -> ORDER BY 반드시 순서 지키기!

 

2. 동명 동물 찾기

SELECT NAME, COUNT(NAME)
FROM ANIMAL_INS
GROUP BY NAME
HAVING (NAME <> 'Null' AND COUNT(NAME)>1)
ORDER BY NAME

- GROUP BY의 조건은 무조건 HAVING!!!!!!! 

 

3. 입양 시간 구하기(1)

SELECT HOUR(DATETIME) AS HOUR , COUNT(HOUR(DATETIME)) AS COUNT
FROM ANIMAL_OUTS
WHERE (HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <=19)
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)

- 레코드의 조건은 WHERE, GROUP BY의 조건은 HAVING

 

4. 입양 시간 구하기(2)

SELECT HR.HOURS AS HOUR, COUNT(ANIMAL_ID) AS COUNT
FROM (SELECT 0 AS HOURS UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION SELECT 20 UNION SELECT 21 UNION SELECT 22 UNION SELECT 23) AS HR
LEFT JOIN ANIMAL_OUTS ON HR.HOURS = HOUR(ANIMAL_OUTS.DATETIME)
GROUP BY HOUR
ORDER BY HOUR

- UNION은 합쳐주는 명령어, JOIN은 교집합, LEFT JOIN은 좌측 기준으로 합침, RIGHT JOIN은 우측 기준

SELECT FROM LEFT JOIN 테이블명 ON 조건

- 데이터에 없는 범위도 포함을 시켜야하기 때문에 0~23에 해당하는 레코드를 만들어 주고 해당 레코드를 HR로 선언 후 ANIMAL_OUTS 과 LEFT JOIN을 한다. 


만만하게 보다가 지금 된통 당하는 중이다. 웬 UNION이 잔뜩 나오더니 음 책으로 한번 다 읽어봐야 될 거 같다. 

Comments