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)