본문 바로가기
Language/SQL

[프로그래머스] MYSQL 코딩테스트 연습 오답노트(lv1~2)

by 태옹 2021. 1. 24.

1. DISTINCT의 위치

동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS 
WHERE NAME IS NOT NULL

*DISTINCT COUNT(NAME)은 틀린 식

 

 

 

2. GROUP BY, CASE THEN

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

 

SELECT ANIMAL_TYPE, count(ANIMAL_TYPE)
FROM ANIMAL_INS 
WHERE ANIMAL_TYPE IN ("Cat","Dog")
GROUP BY ANIMAL_TYPE
ORDER BY CASE WHEN ANIMAL_TYPE ='Cat' THEN 1 ELSE 2 END

 

 

 

 

3. IFNULL(NULL아닌경우,NULL인경우)

동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 No name으로 표시해 주세요.

SELECT ANIMAL_TYPE, IFNULL(NAME,"No name") as NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID;

 

 

 

4. GROUP BY, HAVING

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


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

*WHERE절에서 집계함수 사용 불가

 

 

 

5. ALIAS의 사용

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

SELECT HOUR(DATETIME) AS HOUR, COUNT(HOUR(DATETIME)) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR >= 9 AND HOUR <=19
ORDER BY HOUR;

 

*ALIAS를 생성해주면 변수처럼 사용 가능

 

 

 

6. LIKE "%~%"

보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔습니다. 이 사람이 말하길 할머니가 기르던 개는 이름에 'el'이 들어간다고 합니다. 동물 보호소에 들어온 동물 이름 중, 이름에 EL이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 이름 순으로 조회해주세요. 단, 이름의 대소문자는 구분하지 않습니다.


SELECT ANIMAL_ID,NAME
FROM ANIMAL_INS 
WHERE NAME LIKE "%EL%" and ANIMAL_TYPE="Dog"
ORDER BY NAME;

 

 

 

7. IF()

보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

SELECT ANIMAL_ID,NAME,IF(SEX_UPON_INTAKE LIKE "%Neutered%" OR SEX_UPON_INTAKE LIKE "%Spayed%","O","X") AS "중성화"
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID;

 

 

 

8. SUBSTRING(문자열, 시작인덱스, 끝인덱스)

테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다. (시각(시-분-초)을 제외한 날짜(년-월-일)만 보여주세요.)

SELECT ANIMAL_ID, NAME, SUBSTRING(DATETIME,1,10) AS "날짜"
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID;

 

 

댓글