728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/59042

 

코딩테스트 연습 - 없어진 기록 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

 

1. left outer join

SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_OUTS AS A
LEFT OUTER JOIN ANIMAL_INS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.ANIMAL_ID;

WHERE B.ANIMAL_ID IS NULL을 안 줘서 처음에 틀렸다.

보호소에 들어온 기록이 유실되어야 하니까 null값인 값만 찾는다.

 

 

2. 서브쿼리

SELECT ANIMAL_ID, NAME
FROM ANIMAL_OUTS
WHERE ANIMAL_ID NOT IN (
    SELECT ANIMAL_ID
    FROM ANIMAL_INS
)
ORDER BY ANIMAL_ID;

이게 더 깔끔한 듯

728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/59413

 

코딩테스트 연습 - 입양 시각 구하기(2)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

 

WITH RECURSIVE TMP_A AS(
    SELECT 0 AS H
    UNION ALL
    SELECT H+1
    FROM TMP_A
    WHERE H<23
)

SELECT TMP_A.H AS HOUR, COUNT(HOUR(B.DATETIME)) AS COUNT
FROM TMP_A
LEFT JOIN ANIMAL_OUTS AS B
ON TMP_A.H = HOUR(B.DATETIME)
GROUP BY HOUR
ORDER BY HOUR;

재귀 쿼리는 잘 써본 적이 없는 것 같아서 매번 까먹는다.

외우자

이 문제 여러 번 풀기


* WITH RECURSIVE 쿼리

WITH RECURSIVE 테이블명 AS (
	SELECT 초기값 AS 별명
    UNION ALL
    SELECT 별명 식 FROM 테이블명 WHERE 제어식
)
728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/59414#

 

코딩테스트 연습 - DATETIME에서 DATE로 형 변환

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

SELECT ANIMAL_ID,
	NAME, 
	DATE_FORMAT(DATETIME,'%Y-%m-%d') AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

*DATE_FORMAT(칼럼, 형식)

 

'%Y-%m-%d' 으로 하면 2022-01-23 으로 출력된다.

 

'%H : %i : %s' 으로 하면 23:12:12로 출력된다.

%h는 0~12시 이고 대문자는 0~23시니까 주의하자.

분도 %i 이다.

728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/59411

 

코딩테스트 연습 - 오랜 기간 보호한 동물(2)

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

 

SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS AS A
INNER JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY B.DATETIME-A.DATETIME DESC
LIMIT 2;

* ORDER BY 절에도 연산자 가능

 

SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS AS A
INNER JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY DATEDIFF(B.DATETIME,A.DATETIME) DESC
LIMIT 2;

* 날짜 차이 함수 DATEDIFF(a,b)

728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/59409

 

코딩테스트 연습 - 중성화 여부 파악하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

 

SELECT ANIMAL_ID, 
    NAME, 
    CASE
        WHEN SEX_UPON_INTAKE LIKE '%Neutered%' THEN 'O'
        WHEN SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
        ELSE 'X'
    END AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
728x90

출처: 프로그래머스 

https://programmers.co.kr/learn/courses/30/lessons/59047

 

코딩테스트 연습 - 이름에 el이 들어가는 동물 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

 

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

* LIKE 는 대소문자 구별을 하지 않는다.

728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/59046

 

코딩테스트 연습 - 루시와 엘라 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

-- 코드를 입력하세요
SELECT ANIMAL_ID, 
    NAME,
    SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID;

+ Recent posts