[TIL] 코딩테스트 연습 2일차

Daum·2021년 7월 23일
0

코딩테스트 연습

목록 보기
2/6
post-thumbnail

📎 프로그래머스 - 코딩테스트 연습

# SQL문
CREATE DATABASE `ANIMAL`;
USE `ANIMAL`;
CREATE TABLE `ANIMAL_INS` (`ANIMAL_ID` varchar(20) NOT NULL, `ANIMAL_TYPE` varchar(20) NOT NULL, `DATETIME` datetime NOT NULL, `INTAKE_CONDITION` varchar(20) NOT NULL, `NAME` varchar(20) NULL, `SEX_UPON_INTAKE` varchar(20) NOT NULL);
 
INSERT INTO `ANIMAL_INS` VALUES ('A349996', 'Cat', '2018-01-22 14:32:00', 'Normal', 'Sugar', 'Neutered Male');
INSERT INTO `ANIMAL_INS` VALUES ('A350276', 'Cat', '2017-08-13 13:50:00', 'Normal', 'Jewel', 'Spayed Female');
INSERT INTO `ANIMAL_INS` VALUES ('A350375', 'Cat', '2017-03-06 15:01:00', 'Normal', 'Meo', 'Neutered Male');
INSERT INTO `ANIMAL_INS` VALUES ('A352555', 'Dog', '2014-08-08 04:20:00', 'Normal', 'Harley', 'Spayed Female');

17) 이름이 없는 동물의 아이디
동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회(ID는 오름차순 정렬)

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID ASC;

18) NULL 처리하기
동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회(이름이 없는 동물의 이름은 "No name"으로 표시)

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

19) 없어진 기록 찾기
입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 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
ORDER BY ANIMAL_ID ASC;

20) 있었는데요 없었습니다
보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회(보호 시작일이 빠른 순으로 조회)

SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.NAME
FROM ANIMAL_INS 
LEFT JOIN ANIMAL_OUTS ON ANIMAL_OUTS.ANIMAL_ID = ANIMAL_INS.ANIMAL_ID
WHERE (ANIMAL_INS.DATETIME - ANIMAL_OUTS.DATETIME) > 0
ORDER BY ANIMAL_INS.DATETIME ASC;

21) 오랜 기간 보호한 동물(1)
아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회(보호 시작일 순으로 조회)

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

22) 보호소에서 중성화한 동물
보호소에 들어올 당시에는 중성화1되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회(아이디 순으로 조회)

SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.ANIMAL_TYPE, ANIMAL_INS.NAME
FROM ANIMAL_INS
JOIN ANIMAL_OUTS ON ANIMAL_OUTS.ANIMAL_ID = ANIMAL_INS.ANIMAL_ID
WHERE ANIMAL_INS.SEX_UPON_INTAKE LIKE '%Intact%' 
AND (ANIMAL_OUTS.SEX_UPON_OUTCOME LIKE '%Spayed%' OR ANIMAL_OUTS.SEX_UPON_OUTCOME LIKE '%Neutered%')
ORDER BY ANIMAL_INS.ANIMAL_ID ASC;

23) 루시와 엘라 찾기
동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회(아이디 순으로 조회)

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ("Lucy", "Ella", "Pickle", "Rogan", "Sabrina", "Mitty")
ORDER BY ANIMAL_ID ASC;

24) 이름에 el이 들어가는 동물 찾기
동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회(이름 순으로 조회, 이름의 대소문자는 구분하지 않음)

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

25) 중성화 여부 파악하기
동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회(중성화가 되어있다면 'O', 아니라면 'X'라고 표시)

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

26) 오랜 기간 보호한 동물(2)
입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회(보호 기간이 긴 순으로 조회)

SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.NAME
FROM ANIMAL_OUTS
LEFT JOIN ANIMAL_INS ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
ORDER BY ANIMAL_OUTS.DATETIME - ANIMAL_INS.DATETIME DESC
LIMIT 2;

27) DATETIME에서 DATE로 형 변환
ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜1를 조회(아이디 순으로 조회)

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

📎 프로그래머스 - 코딩테스트 연습

우유와 요거트가 담긴 장바구니
데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회(장바구니의 아이디 순으로 조회)

SELECT CART_ID
FROM CART_PRODUCTS
WHERE CART_ID IN(
	SELECT CART_ID 
	FROM CART_PRODUCTS
	WHERE NAME = "Yogurt") AND NAME = "Milk"
ORDER BY CART_ID ASC;

📎 프로그래머스 - 코딩테스트 연습

헤비 유저가 소유한 장소
이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회

SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE HOST_ID IN (
    SELECT HOST_ID
    FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(HOST_ID) > 1
    )
ORDER BY ID ASC;

0개의 댓글

관련 채용 정보