프로그래머스 SQL 고득점 KIT

출처

SELECT

59034 - 모든 레코드 조회하기

문제 링크

SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID ASC

59035 - 역순 정렬하기

문제 링크

SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC

59036 - 아픈 동물 찾기

문제 링크

SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION="Sick"

59037 - 어린 동물 찾기

문제 링크

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

59403 - 동물의 아이디와 이름

문제 링크

SELECT ANIMAL_ID, NAME FROM ANIMAL_INS

59404 - 여러 기준으로 정렬하기

문제 링크

SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME ASC, DATETIME DESC

59405 - 상위 n개 레코드

문제 링크

SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1

SUM, MAX, MIN

59415 - 최댓값 구하기

문제 링크

SELECT MAX(DATETIME) AS 시간 FROM ANIMAL_INS

59038 - 최솟값 구하기

문제 링크

SELECT MIN(DATETIME) AS 시간 FROM ANIMAL_INS

59406 - 동물 수 구하기

문제 링크

SELECT COUNT(*) AS 동물수 FROM ANIMAL_INS

59408 - 중복 제거하기

문제 링크

SELECT COUNT(DISTINCT NAME) AS 동물수 FROM ANIMAL_INS WHERE NAME IS NOT NULL

GROUP BY

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

문제 링크

SELECT ANIMAL_TYPE, COUNT(*) AS 'count' FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE ASC 

59041 - 동명 동물 수 찾기

문제 링크

SELECT NAME, COUNT(*) AS 'COUNT' FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME) >= 2 ORDER BY NAME

59412 - 입양 시각 구하기 (1)

문제 링크

SELECT HOUR(DATETIME) AS 'HOUR', COUNT(*) AS 'COUNT'
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR >= 9 AND HOUR <= 19
ORDER BY HOUR(DATETIME) ASC

59413 - 입양 시각 구하기 (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

IS NULL

59039 - 이름이 없는 동물의 이야기

문제 링크

SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL

59407 - 이름이 있는 동물의 아이디

문제 링크

SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL

59410 - NULL 처리하기

문제 링크

SELECT ANIMAL_TYPE, IF(NAME IS NULL, 'No name', NAME) AS NAME, SEX_UPON_INTAKE 
FROM ANIMAL_INS

JOIN

59042 - 없어진 기록 찾기

문제 링크

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 b.ANIMAL_ID

59043 - 있었는데요 없었습니다

문제 링크

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 NOT NULL AND a.DATETIME > b.DATETIME
ORDER BY a.DATETIME

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

문제 링크

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

59045 - 보호소에서 중성화한 동물

문제 링크

SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.ANIMAL_TYPE, ANIMAL_INS.NAME
FROM ANIMAL_INS
    LEFT OUTER JOIN ANIMAL_OUTS 
    ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.SEX_UPON_INTAKE != ANIMAL_OUTS.SEX_UPON_OUTCOME

String, Date

59046 루시와 엘라 찾기

문제 링크

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

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

문제 링크

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE UPPER(NAME) LIKE "%EL%" AND ANIMAL_TYPE = "Dog"
ORDER BY NAME ASC

59409 - 중성화 여부 파악하기

문제 링크

SELECT ANIMAL_ID, NAME,
    IF(SEX_UPON_INTAKE LIKE "%Neutered%" OR SEX_UPON_INTAKE LIKE "%Spayed%", 'O', 'X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC

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

문제 링크

SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.NAME
FROM ANIMAL_INS, ANIMAL_OUTS
WHERE ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
ORDER BY ANIMAL_OUTS.DATETIME - ANIMAL_INS.DATETIME DESC
LIMIT 2

59414 - DATETIME에서 DATE로 형 변환

문제 링크

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

기타 유용한 함수들

  • DATEDIFF(날짜1, 날짜2) : 날짜1과 날짜2의 날짜 차이를 구할 수 있음
  • ABS(숫자) : 숫자의 절댓값
  • DATE_FORMAT(날짜, '%Y-%m-%d %t') : 날짜의 형식을 바꿉니다.
  • IF(조건, 값1, 값2) : 조건이 참이면 값1, 거짓이면 값2

+ Recent posts