업데이트:

🚀 프로그래머스 SQL 문제풀기🚀


SELECT


어린 동물 찾기

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != "Aged"
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE not INTAKE_CONDITION = "Aged"


여러기준으로 정렬하기

SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER by NAME , DATETIME DESC


상위 n개 레코드

-- 코드를 입력하세요
SELECT NAME 
FROM ANIMAL_INS 
ORDER by DATETIME 
LIMIT 1



SUM, MAX, MIN


최솟값 구하기

-- 코드를 입력하세요
SELECT DATETIME as "시간"
FROM ANIMAL_INS
ORDER by DATETIME
LIMIT 1


동물의 수 구하기

-- 코드를 입력하세요
SELECT count(*)
FROM ANIMAL_INS


중복 제거하기

-- 코드를 입력하세요
SELECT count(DISTINCT NAME)
FROM ANIMAL_INS



GROUP BY


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

-- 코드를 입력하세요
SELECT ANIMAL_TYPE , count(*) as "count"
FROM ANIMAL_INS
order by ANIMAL_TYPE
GROUP by ANIMAL_TYPE


동명 동물 수 찾기

-- 코드를 입력하세요
SELECT NAME, count(NAME)
FROM ANIMAL_INS
GROUP BY NAME
HAVING count(NAME)> 1
ORDER BY NAME


입양 시각 구하기(1)

SELECT HOUR(DATETIME), count(*)
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 and 19
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)


입양 시각 구하기(2)

-- 코드를 입력하세요
 
WITH RECURSIVE COUNTER(HOUR) AS ( 
    SELECT 0 #비반복문
    UNION ALL #UNION 구문
    SELECT HOUR + 1 FROM COUNTER WHERE HOUR < 23 #recursive 구문 
)


SELECT HOUR, COUNT(A.ANIMAL_ID) AS COUNT
FROM COUNTER as C LEFT JOIN 
        ANIMAL_OUTS A ON C.HOUR = HOUR(A.DATETIME)
GROUP BY HOUR
ORDER BY HOUR



IS NULL


이름이 없는 동물의 아이디

-- 코드를 입력하세요
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE name is null


이름이 있는 동물의 아이디

-- 코드를 입력하세요
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME is not null
-- 코드를 입력하세요
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME != null


NULL 처리하기

-- 코드를 입력하세요
SELECT ANIMAL_TYPE,(CASE WHEN NAME is null then "No name" else NAME END) as NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID



JOIN


없어진 기록 찾기

-- 코드를 입력하세요
SELECT B.ANIMAL_ID, B.NAME
FROM  ANIMAL_INS A Right JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.ANIMAL_ID is null
ORDER BY ANIMAL_ID


있었는데요 없었습니다

-- 코드를 입력하세요
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS A right Join ANIMAL_OUTS B on A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.DATETIME > B.DATETIME
ORDER BY A.DATETIME


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

-- 코드를 입력하세요
SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS A left Join ANIMAL_OUTS B on A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID is null -- 입양이 못가야 하니깐 테이블에서 비워져야 한다. 
ORDER BY A.DATETIME
limit 3


보호소에서 중성화한 동물

-- 코드를 입력하세요
SELECT B.ANIMAL_ID, B.ANIMAL_TYPE,B.NAME
FROM ANIMAL_INS A inner JOIN ANIMAL_OUTS B on A.ANIMAL_ID = B.ANIMAL_ID
WHERE (A.SEX_UPON_INTAKE like "Intact%") 
and ((B.SEX_UPON_OUTCOME like "Neutered%") or ( B.SEX_UPON_OUTCOME like "Spayed%"))



String, Date


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

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME like "%el%" and ANIMAL_TYPE like "DOG"
ORDER BY NAME


중성화 여부 확인하기

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, (case when SEX_UPON_INTAKE like "Intact%" then 
                     'X' else 'O' end) as "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID


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

-- 코드를 입력하세요
SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_INS A RIGHT JOIN ANIMAL_OUTS B on A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY B.DATETIME - A.DATETIME DESC
LIMIT 2


Date로 형변환

SELECT ANIMAL_ID, NAME, date_format(DATETIME, '%Y-%m-%d') as "날짜" #ymd 대문자랑 소문자랑 결과값이 다름.
FROM ANIMAL_INS





카테고리:

업데이트: