Skip to content

Files

Latest commit

 

History

History
252 lines (190 loc) · 4.8 KB

220826.md

File metadata and controls

252 lines (190 loc) · 4.8 KB

2022-08-26 / DB 9일차 실습

프로그래머스 스쿨 / SQL 고득점 Kit 풀이

[유의] GROUP BY "입양 시각 구하기(2)" 문제는 제외

1. SELECT (link)

  • 모든 레코드 조회하기

    SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID;
  • 역순 정렬하기

    SELECT NAME, DATETIME 
    FROM ANIMAL_INS 
    ORDER BY ANIMAL_ID DESC;
  • 아픈 동물 찾기

    SELECT ANIMAL_ID, NAME 
    FROM ANIMAL_INS 
    WHERE INTAKE_CONDITION="Sick" 
    ORDER BY ANIMAL_ID;
  • 어린 동물 찾기

    SELECT ANIMAL_ID, NAME 
    FROM ANIMAL_INS 
    WHERE INTAKE_CONDITION !="Aged" 
    ORDER BY ANIMAL_ID;
  • 동물의 아이디와 이름

    SELECT ANIMAL_ID, NAME FROM ANIMAL_INS;
  • 여러 기준으로 정렬하기

    SELECT ANIMAL_ID, NAME, DATETIME 
    FROM ANIMAL_INS 
    ORDER BY NAME ASC, DATETIME DESC;
  • 상위 n개 레코드

    SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1;

2. SUM, MAX, MIN (link)

  • 최댓값 구하기

    SELECT DATETIME 
    FROM ANIMAL_INS 
    ORDER BY DATETIME DESC 
    LIMIT 1;
  • 최솟값 구하기

    SELECT MIN(DATETIME) FROM ANIMAL_INS;
  • 동물 수 구하기

    SELECT COUNT(*) FROM ANIMAL_INS;
  • 중복 제거하기

    SELECT COUNT(DISTINCT NAME) 
    FROM ANIMAL_INS 
    WHERE NAME IS NOT NULL;

3. GROUP BY (link)

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

    SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) FROM ANIMAL_INS
    GROUP BY ANIMAL_TYPE
    ORDER BY 
    CASE ANIMAL_TYPE
        WHEN 'Cat' THEN 1
        WHEN 'Dog' THEN 2
    END;
  • 동명 동물 수 찾기

    SELECT NAME, COUNT(NAME)
    FROM ANIMAL_INS
    GROUP BY NAME HAVING COUNT(NAME)>=2 
    ORDER BY NAME;
  • 입양 시각 구하기(1)

    SELECT HOUR(DATETIME) HOUR, COUNT(DATETIME) COUNT
    FROM ANIMAL_OUTS
    GROUP BY HOUR(DATETIME)
    HAVING HOUR >= 9 and HOUR <= 19
    ORDER BY HOUR(DATETIME);

4. IS NULL (link)

  • 이름이 없는 동물의 아이디

    SELECT ANIMAL_ID 
    FROM ANIMAL_INS 
    WHERE NAME IS NULL 
    ORDER BY ANIMAL_ID ASC;
  • 이름이 있는 동물의 아이디

    SELECT ANIMAL_ID
    FROM ANIMAL_INS
    WHERE NAME IS NOT NULL
    ORDER BY ANIMAL_ID ASC;
  • NULL 처리하기

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

5. JOIN (link)

  • 없어진 기록 찾기

    SELECT A.ANIMAL_ID, A.NAME
    FROM ANIMAL_OUTS A
        LEFT JOIN ANIMAL_INS B ON A.ANIMAL_ID=B.ANIMAL_ID 
    WHERE B.ANIMAL_ID IS NULL 
    ORDER BY A.ANIMAL_ID;
  • 있었는데요 없었습니다

    SELECT A.ANIMAL_ID, A.NAME
    FROM ANIMAL_INS A, ANIMAL_OUTS B 
    WHERE A.ANIMAL_ID=B.ANIMAL_ID AND A.DATETIME>B.DATETIME
    ORDER BY A.DATETIME ASC;
  • 오랜 기간 보호한 동물(1)

    SELECT A.NAME, A.DATETIME 
    FROM ANIMAL_INS A
        LEFT JOIN ANIMAL_OUTS B
        ON A.ANIMAL_ID=B.ANIMAL_ID
    WHERE B.DATETIME IS NULL
    ORDER BY A.DATETIME
    LIMIT 3;
  • 보호소에서 중성화한 동물

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

6. String, Date (link)

  • 루시와 엘라 찾기

    SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
    FROM ANIMAL_INS
    WHERE (NAME LIKE 'Lucy') OR (NAME LIKE 'Ella') OR (NAME LIKE 'Pickle') OR 
        (NAME LIKE 'Rogan') OR (NAME LIKE 'Sabrina') OR (NAME LIKE 'Mitty')
    ORDER BY ANIMAL_ID;
  • 이름에 el이 들어가는 동물 찾기

    SELECT ANIMAL_ID, NAME 
    FROM ANIMAL_INS
    WHERE (ANIMAL_TYPE='Dog') AND (NAME LIKE '%EL%')
    ORDER BY NAME;
  • 중성화 여부 파악하기

    SELECT ANIMAL_ID, NAME, 
        CASE
            WHEN (SEX_UPON_INTAKE LIKE '%Intact%') THEN "X"
            ELSE "O"
        END 
    FROM ANIMAL_INS
    ORDER BY ANIMAL_ID;
  • 오랜 기간 보호한 동물(2)

    SELECT A.ANIMAL_ID, A.NAME 
    FROM ANIMAL_INS A
        JOIN ANIMAL_OUTS B
        ON A.ANIMAL_ID=B.ANIMAL_ID
    ORDER BY (B.DATETIME - A.DATETIME) DESC
    LIMIT 2;
  • DATETIME에서 DATE로 형 변환

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