카테고리 없음

[프로그래머스 SQL kit] GROUP BY

아놀드금자 2022. 2. 28. 17:20
728x90

programmers SQL 고득점 kit 답안

코딩테스트 대비 

GROUP BY

 

구글링하다보면 자꾸 오라클이랑 mssql이 걸리는데 개킹받음

only m.y.s.q.l

 

 

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

동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

SELECT ANIMAL_TYPE, COUNT(*) 

FROM ANIMAL_INS 

GROUP BY ANIMAL_TYPE 

ORDER BY ANIMAL_TYPE ASC;

쉽지않다

컬럼은 ANYMAL_TPYE과 COUNT 두 개

ANYMAL_TYPE컬럼을 그룹화하여 행으로~

고양이를 개보다 먼저조회 -> 오름차순

 


동명 동물 수 찾기

동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

SELECT NAME, COUNT(*) FROM ANIMAL_INS 
GROUP BY NAME
HAVING COUNT(NAME) > 1 
ORDER BY NAME ASC;

 

컬럼은 NAME과 COUNT 두 가지

NAME컬럼을 그룹화하여 행으로~

HAVING으로 조건 검색 -> name 값이 두 번 이상 쓰인 이름만!

 

 


입양 시각 구하기(1)

09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

처음 안 사실!

현재 YYYY-MM-DD HH:MM:SS로 표시되는 DATETIME에서 일부 값만 표시하고 싶다면??

 

연도만 표시: YEAR(DATETIME) -> EX) 2021

월만 표시: MONTH(DATETIME) -> EX) 11

날짜만 표시: DAY(DATETIME) -> EX) 31

시간, 분, 초는 각각 HOUR(), MINUTE(), SECOND() 로 표시하면 되겠다

내가 필요한 값은 시간이기 때문에 HOUR(DATETIME)을 사용

 

첫 시도

SELECT HOUR(DATETIME) AS HOUR, COUNT(*) 

FROM ANIMAL_OUTS 

GROUP BY HOUR(DATETIME) 

HAVING HOUR(DATETIME) 

BETWEEN 9 AND 19 

ORDER BY HOUR(DATETIME) ASC;

 

앗 근데 실행 결과

SQL 실행 중 오류가 발생하였습니다.
Unknown column 'DATETIME' in 'having clause'

오류문구를 보니 having절에 문제가 있는듯

구글링 해보니까 having절에는 HOUR(DATETIME)과 같은 함수식을 쓰면 안된다고 함!!

그래서 이 경우엔 위에서 AS 이용해 붙인 alias인 HOUR를 사용해야 한다

 

SELECT HOUR(DATETIME) AS HOUR, COUNT(*) FROM ANIMAL_OUTS GROUP BY HOUR(DATETIME) HAVING HOUR BETWEEN 9 AND 19 ORDER BY HOUR(DATETIME) ASC;

 


입양 시각 구하기(2)

 

 

728x90