티스토리 뷰
- 고양이와 개는 몇마리 있을까
문제 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME | TYPE | NULLABLE |
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 |
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.
예시
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
A373219 | Cat | 2014-07-29 11:43:00 | Normal | Ella | Spayed Female |
A377750 | Dog | 2017-10-25 17:17:00 | Normal | Lucy | Spayed Female |
A354540 | Cat | 2014-12-11 11:48:00 | Normal | Tux | Neutered Male |
고양이는 2마리, 개는 1마리 들어왔습니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
▼ 정답
<hide/>
SELECT DISTINCT ANIMAL_TYPE, count(ANIMAL_TYPE) as count from ANIMAL_INS group by ANIMAL_TYPE order by ANIMAL_TYPE asc;
- 동명 동물 수 찾기
문제 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME | TYPE | NULLABLE |
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 |
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
예시
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
A396810 | Dog | 2016-08-22 16:13:00 | Injured | Raven | Spayed Female |
A377750 | Dog | 2017-10-25 17:17:00 | Normal | Lucy | Spayed Female |
A355688 | Dog | 2014-01-26 13:48:00 | Normal | Shadow | Neutered Male |
A399421 | Dog | 2015-08-25 14:08:00 | Normal | Lucy | Spayed Female |
A400680 | Dog | 2017-06-17 13:29:00 | Normal | Lucy | Spayed Female |
A410668 | Cat | 2015-11-19 13:41:00 | Normal | Raven | Spayed Female |
- Raven 이름은 2번 쓰였습니다.
- Lucy 이름은 3번 쓰였습니다
- Shadow 이름은 1번 쓰였습니다.
▼ 정답
<hide/>
SELECT NAME, COUNT(NAME) AS COUNT FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME) > 1 ORDER BY NAME ASC;
- 입양 시각 구하기(1)
문제 설명
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_OUTCOME | VARCHAR(N) | FALSE |
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
▼ 정답
<hide/>
SELECT DISTINCT HOUR(DATETIME) AS HOUR, COUNT(HOUR(DATETIME)) FROM ANIMAL_OUTS GROUP BY HOUR(DATETIME) HAVING HOUR BETWEEN 9 AND 19 ORDER BY HOUR ASC;
날짜 데이터에서 일부만을 추출하는 함수
- YEAR( ) : 년
- MONTH( ) : 월
- DAY( ) : 일 (=DAY OF MONTH)
- HOUR( ) : 시
- MINUTE( ) : 분
- SECOND( ) : 초
- 입양 시간 구하기(2)
문제 설명
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_OUTCOME | VARCHAR(N) | FALSE |
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
▼ 정답
<hide/>
SELECT HOUR, COUNT(*) AS COUNT FROM
(SELECT TO_CHAR(DATETIME,'HH24') AS HOUR FROM ANIMAL_OUTS
WHERE TO_CHAR(DATETIME,'HH24') BETWEEN 9 AND 19)ANIMAL
GROUP BY HOUR ORDER BY HOUR ASC;
※ group by 시에 없는 항목 출력하기
WITH RECURSIVE cte AS (SELECT 1 AS 별칭 UNION ALL SELECT n + 1 FROM cte WHERE 별칭 < 24)SELECT 별칭 FROM cte
※ NULL값인 경우 특정값으로 치환하는 함수
- NVL(컬럼명, 0) : 컬럼값이 NULL이면 0으로 대체
- 형식 : SELECT NVL(칼럼명, 0) FROM 테이블명;
※ SUM/COUNT 시, NULL 값 0 으로 표시되게 하는 함수(GROUP BY COUNT (NULL 포함 집계)
- SELECT NVL(컬럼명, 0) FROM (SELECT SUM/COUNT(컬럼명) AS 별칭 FROM 테이블명 WHERE 조건절);
- SELECT 칼럼, COUNT(CASE WHEN 칼럼 IS NULL THEN 'NULL' ELSE 칼럼 END) AS CNT FROM 테이블 GROUP BY 칼럼
'CodingTest > SQL | ORACLE' 카테고리의 다른 글
프로그래머스 | SQL | SUM, MAX, MIN 코딩 테스트 (0) | 2022.05.11 |
---|---|
프로그래머스 | SQL | SELECT 코딩 테스트 (0) | 2022.05.11 |
- Total
- Today
- Yesterday
- 데이터모델링의이해
- Baekjoon5597
- Baekjoon2562
- 백준2525
- 노랭이책핵심정리
- Baekjoon3052
- 백준10950
- Baekjoon1546
- Baekjoon8958
- 백준
- BAEKJOON2588
- 백준5597
- Baekjoon1330
- BAEKJOON2480
- 백준1546
- 노랭이책
- Baekjoon10950
- 백준10871
- SQLD핵심정리
- BAEKJOON
- SQL
- Baekjoon8393
- 백준10870
- 백준3052
- 백준2480
- 백준8393
- BAEKJOON2525
- 프로그래머스
- Baekjoon10870
- Baekjoon10871
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |