문제


ANIMAL_OUTS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, 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


보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 9시부터 19시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.


예시

SQL문을 실행하면 다음과 같이 나와야 합니다.


HOURS

COUNT 

9

10

11

13 

12

10 

13

14 

14

15

16

10 

17

12 

18

16 

19



풀이


1
2
3
4
SELECT HOUR(DATETIME) HOURS, COUNT(DATETIME) COUNT
FROM ANIMAL_OUTS
GROUP BY HOURS HAVING HOURS > 8 and HOURS < 20
ORDER BY HOURS
cs

  • HOUR 함수는 %Y-%m-%d %H:%M:%S 형태의 시간에서 시간을 가져온다.
  • GROUP BY 에서 조건문을 통해 문제에서 주어진 9시부터 19시 정보를 가져온다.
  • SELECT 에서 HOUR(DATETIME) 정보를 HOURS로 테이블 명으로 칭함으로써 시간대 그룹으로 묶고 시간 조건을 설정한다.


문제


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번 쓰였습니다.

따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

NAME 

COUNT 

Lucy

Raven



풀이


1
2
3
4
SELECT NAME, COUNT(NAME) count
FROM ANIMAL_INS
GROUP BY NAME HAVING COUNT(NAME) > 1
ORDER BY NAME 
cs

  • GROUP BY [컬럼명] HAVING [조건] : 조건에 해당하는 컬럼들을 그룹화한다.
  • HAVING 은 집계함수를 가지고 조건을 비교 시 사용한다. (WHERE 절은 집계함수 사용 불가)
  • COUNT(*) 은 해당 문제에서 불가 : * 은 NULL 값도 포함하기에 조건 비교를 할 수 없다.





출처 : https://programmers.co.kr/learn/courses/30/lessons/59041

문제


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문을 실행하면 다음과 같이 나와야 합니다.


ANIMAL_TYPE

 count

Cat

Dog

1


풀이


1
2
3
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
cs

  • COUNT([컬럼명]) [컬럼 나타낼 이름] 을 하면 count 한 값들의 컬럼명을 설정할 수 있다.
  • GROUP BY 는 데이터들을 원하는 그룹으로 나눌 수 있다.






출처 : https://programmers.co.kr/learn/courses/30/lessons/59040

문제


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 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.


예시

예를 들어 ANIMAL_INS 테이블이 다음과 같다면


ANIMAL_ID

ANIMAL_TYPE 

DATETIME

INTAKE_CONDITION 

NAME

SEX_UPON_INTAKE 

A562649

Dog

2014-03-20 18:06:00

Sick

NULL

Spayed Female

A412626

Dog

2016-03-13 11:17:00

Normal

*Sam

Neutered Male

A563492

Dog

2014-10-24 14:45:00

Normal

*Sam

Neutered Male

A513956

Dog

2017-06-14 11:54:00

Normal

*Sweetie

Spayed Female


보호소에 들어온 동물의 이름은 NULL(없음), *Sam, *Sam, *Sweetie입니다. 이 중 NULL과 중복되는 이름을 고려하면, 보호소에 들어온 동물 이름의 수는 2입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.


count

2


※ 컬럼 이름(위 예제에서는 count)은 일치하지 않아도 됩니다.


풀이


1
2
3
SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
cs

  • WHRER NAME IS NOT NULL :  해당 컬럼의 값이 NULL 이 아닌 것을 가져온다.
  • COUNT(컬럼명) : NULL 값을 제외하고 COUNT
  • COUNT(*) : NULL 포함 COUNT
  • COUNT(DISTINCT [컬럼명]) : 중복 제외 COUNT






출처 : https://programmers.co.kr/learn/courses/30/lessons/59408

+ Recent posts