Coding test

[MySQL] 프로그래머스 SQL

매정 2021. 10. 2. 20:45

모든 레코드 조회하기

SELECT * FROM ANIMAL_INS 
ORDER BY ANIMAL_ID

 

역순 정렬하기

SELECT NAME, DATETIME from ANIMAL_INS
ORDER BY ANIMAL_ID desc

 

아픈 동물 찾기

SELECT ANIMAL_ID,NAME FROM ANIMAL_INS
where INTAKE_CONDITION='Sick'

 

어린 동물 찾기

SELECT ANIMAL_ID,NAME FROM ANIMAL_INS
where INTAKE_CONDITION!="Aged"
order by ANIMAL_ID

동물의 아이디와 이름

SELECT ANIMAL_ID,NAME from ANIMAL_INS
order by ANIMAL_ID

 

여러 기준으로 정렬하기

SELECT ANIMAL_ID,NAME,DATETIME from ANIMAL_INS
order by NAME asc, DATETIME desc

상위 n개의 레코드

SELECT NAME from animal_ins
order by DATETIME 
limit 1

 

최댓값 구하기

SELECT DATETIME from animal_ins
order by DATETIME desc limit 1

 

최솟값 구하기

SELECT DATETIME from animal_ins
order by datetime limit 1

 

동물 수 구하기

SELECT COUNT(*) from animal_ins

 

중복 제거하기

SELECT COUNT(distinct NAME) from animal_ins

 

고양이와 개는 몇 마리 있을까

SELECT ANIMAL_TYPE,count(*) from animal_ins
group by ANIMAL_TYPE
having ANIMAL_TYPE="cat" or ANIMAL_TYPE="dog"
order by ANIMAL_TYPE

 

동명 동물 수 찾기

SELECT NAME,count(*) as COUNT from ANIMAL_INS
group by NAME
having count(NAME)>1
order by NAME

 

입양 시각 구하기(1)

SELECT HOUR(DATETIME) as HOUR,COUNT(HOUR(DATETIME)) as COUNT from ANIMAL_OUTS
group by HOUR
having HOUR>=9 and HOUR<20
order by HOUR(DATETIME)

 

입양 시각 구하기(2)

SET @HOUR := -1;
SELECT (@HOUR := @HOUR +1) as HOUR ,
        (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME)=@HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23

 

이름이 없는 동물의 아이디

SELECT ANIMAL_ID from ANIMAL_INS
where NAME is NULL

 

이름이 있는 동물의 아이디

SELECT ANIMAL_ID from ANIMAL_INS
where NAME is not NULL

 

NULL 처리하기

SELECT ANIMAL_TYPE, ifnull(name,'No name') as NAME, SEX_UPON_INTAKE 
FROM ANIMAL_INS
order by ANIMAL_ID

 

없어진 기록 찾기

SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.NAME 
from ANIMAL_OUTS
left join ANIMAL_INS
on ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID 
where ANIMAL_INS.ANIMAL_ID is NULL

#SELECT A.ANIMAL_ID, A.NAME 
#FROM ANIMAL_OUTS A left join ANIMAL_INS B
#on A.ANIMAL_ID = B.ANIMAL_ID
#WHERE B.ANIMAL_ID is NULL

 

 

있었는데요 없었습니다

SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS A left join ANIMAL_OUTS B
on A.ANIMAL_ID = B.ANIMAL_ID
where A.DATETIME > B.DATETIME
order by A.DATETIME

 

 

오랜 기간 보호한 동물(1)

SELECT ANIMAL_INS.NAME, ANIMAL_INS.DATETIME
FROM ANIMAL_INS left join ANIMAL_OUTS
on ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
where ANIMAL_OUTS.ANIMAL_ID is NULL
order by ANIMAL_INS.DATETIME
LIMIT 3

 

 

보호소에서 중성화한 동물

SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.ANIMAL_TYPE, ANIMAL_INS.NAME
FROM ANIMAL_INS
left join ANIMAL_OUTS
on ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.SEX_UPON_INTAKE like "%Intact%"
AND (ANIMAL_OUTS.SEX_UPON_OUTCOME like "%Neutered%" OR
     ANIMAL_OUTS.SEX_UPON_OUTCOME like "%Spayed%")

 

루시와 엘라 찾기

SELECT ANIMAL_ID,NAME,SEX_UPON_INTAKE
FROM ANIMAL_INS
where NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')

 

이름에 el이 들어가는 동물 찾기

SELECT ANIMAL_ID, NAME 
FROM ANIMAL_INS
where ANIMAL_TYPE='Dog' and lower(NAME) like '%el%'
order by NAME

 

중성화 여부 파악하기

SELECT ANIMAL_ID, NAME, 
IF(SEX_UPON_INTAKE LIKE '%NEUTERED%' OR SEX_UPON_INTAKE LIKE '%SPAYED%','O','X') AS '중성화'
FROM ANIMAL_INS

 

 

오랜 기간 보호한 동물(2)

SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.NAME
FROM ANIMAL_INS left join ANIMAL_OUTS
on ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
order by ANIMAL_OUTS.DATETIME - ANIMAL_INS.DATETIME desc
limit 2

 

 

DATETIME에서 DATE로 형 변환

SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME,'%Y-%m-%d') as 날짜
from ANIMAL_INS

 

우유와 요거트가 담긴 장바구니

SELECT DISTINCT CART_ID 
FROM CART_PRODUCTS
where NAME='MILK' 
AND CART_ID IN (SELECT CART_ID
            FROM CART_PRODUCTS
            WHERE NAME = 'Yogurt')

 

헤비 유저가 소유한 장소

SELECT ID, NAME, HOST_ID
FROM PLACES
where HOST_ID IN(
    SELECT HOST_ID from PLACES
    group by HOST_ID
    having count(*)>=2)