728x90

출처: 프로그래머스

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

 

코딩테스트 연습 - 헤비 유저가 소유한 장소

PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를

programmers.co.kr

 

1. 서브쿼리 사용

SELECT *
FROM PLACES
WHERE HOST_ID IN (
    SELECT HOST_ID
    FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(HOST_ID)>=2
)
ORDER BY ID;

2. INNER JOIN 사용

SELECT ID, NAME, A.HOST_ID
FROM PLACES A
INNER JOIN(
    SELECT HOST_ID, COUNT(HOST_ID)
    FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(HOST_ID)>=2
)AS B 
ON A.HOST_ID = B.HOST_ID
ORDER BY A.ID;
728x90

출처: 프로그래머스

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

 

코딩테스트 연습 - 보호소에서 중성화한 동물

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

programmers.co.kr

1. join 사용

SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_OUTS AS A
LEFT OUTER JOIN ANIMAL_INS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.SEX_UPON_INTAKE LIKE 'Intact%'
AND A.SEX_UPON_OUTCOME NOT LIKE 'Intact%'
ORDER BY A.ANIMAL_ID;

2. 서브쿼리 사용

SELECT ANIMAL_ID, ANIMAL_TYPE, NAME
FROM ANIMAL_OUTS
WHERE ANIMAL_ID IN (
    SELECT ANIMAL_ID
    FROM ANIMAL_INS
    WHERE SEX_UPON_INTAKE LIKE 'Intact%'
)
AND SEX_UPON_OUTCOME NOT LIKE 'Intact%'
ORDER BY ANIMAL_ID;
728x90

출처: 프로그래머스

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

 

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

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

programmers.co.kr

1. join 사용

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

2. 서브쿼리 사용

SELECT NAME, DATETIME
FROM ANIMAL_INS
WHERE ANIMAL_ID NOT IN (
    SELECT ANIMAL_ID
    FROM ANIMAL_OUTS
)
ORDER BY DATETIME
LIMIT 3;
728x90

출처: 프로그래머스

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

 

코딩테스트 연습 - 있었는데요 없었습니다

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
WHERE A.DATETIME>B.DATETIME
ORDER BY A.DATETIME;

 

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 이다.

+ Recent posts