https://programmers.co.kr/learn/courses/30/parts/17044
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
문제1.
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.
SELECT ANIMAL_TYPE,COUNT(*)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
문제2.
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
SELECT NAME, COUNT(*)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
HAVING COUNT(*)>=2
GROUP BY NAME
ORDER BY NAME
문제3.
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
SELECT DISTINCT TO_CHAR(DATETIME,'HH24'),COUNT(TO_CHAR(DATETIME,'HH24'))
FROM ANIMAL_OUTS
WHERE TO_CHAR(DATETIME,'HH24') BETWEEN 9 AND 19
GROUP BY TO_CHAR(DATETIME,'HH24')
ORDER BY TO_CHAR(DATETIME,'HH24')
=> 진짜 복잡하다..
SELECT 문에 DISTINCT를 쓸 경우 ORDER BY에도 그 DISTINCT문의 컬럼을 써줘야함.
문제4.
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
머리 빠개지는 줄 ^^
SELECT DISTINCT H.HOUR,COUNT(DATETIME)
FROM (SELECT ROWNUM-1 HOUR FROM DUAL CONNECT BY ROWNUM<=24) H
LEFT JOIN ANIMAL_OUTS ON(H.HOUR=TO_NUMBER(TO_CHAR(ANIMAL_OUTS.DATETIME,'HH24')))
GROUP BY HOUR
ORDER BY HOUR
'👩🏻💻Technical things > SQL' 카테고리의 다른 글
[ MyBatis ] 동적 쿼리 (0) | 2020.09.22 |
---|---|
[ 프로그래머스 IS NULL,JOIN,STRING,DATE 문제 풀이 ] (0) | 2020.08.07 |
[ 프로그래머스 SUM,MAX,MIN 문제 풀이 ] (0) | 2020.08.07 |
[ 프로그래머스 SELECT 문 문제 풀이 ] (0) | 2020.08.07 |