프로그래머스 레벨2 SQL 문제풀이

Sorbet·2021년 5월 8일
0

최솟값 구하기

SELECT MIN(DATETIME) FROM ANIMAL_INS 

동물 수 구하기

  • 링크:
  • 풀이 : COUNT(*) 절을 사용해서 갯수 구하기
SELECT COUNT(*) FROM ANIMAL_INS;

중복 제거하기

  • 링크:
  • 풀이 : COUNT 절, DISTINCT절 사용
    • COUNT(DISTINCT NAME) : NAME 컬럼의 갯수를 중복제거하고 구해라
    • WHERE NAME IS NOT NULL : NAME 칼럼에서 NULL 이 아닌걸로
SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS WHERE NAME IS NOT NULL;

NULL 처리하기

-- SELECT ANIMAL_TYPE,NAME,SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID ASC;
SELECT ANIMAL_TYPE, IFNULL(NAME,'No name'),SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID ASC;
  • IFNULL(NAME,'No name') 이거는 처음알았다 유용할듯!

루시와 엘라 찾기

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


SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty') 
  • or연산을 돌리니까 내 생각이랑 다르게 동작한다는걸 배워간다.
  • WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty') 이런식으로 작성해야한다!

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

  • 링크 : https://programmers.co.kr/learn/courses/30/lessons/59047
  • 풀이 : 포인트는 NAME LIKE '%el%' 문을 사용해서 이름에 el이 들어가는 항목을 검색해야 했다
    • 추가로 AND 로 연결해주는 쿼리도 필요하긴 한데 이건 뭐 레벨1에서 연습이 충분히 되었을듯
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE NAME LIKE '%el%' AND ANIMAL_TYPE = 'Dog' ORDER BY NAME ASC;

DATETIME에서 DATE로 형 변환

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

중성화 여부 파악하기

  • 링크 : https://programmers.co.kr/learn/courses/30/lessons/59409
  • 풀이 : - CASE 절을 사용하는게 관건이였습니다.
    • WHEN 절에 조건을 넣고
      • SEX_UPON_INTAKE LIKE '%Neutered%'
      • SEX_UPON_INTAKE LIKE '%Spayed%'
    • THEN - WHEN 절을 사용하는데
      • 참인 경우 THEN 'O'
      • 거짓인 경우 ELSE 'X'
    • 마지막에는 END로 끝내고
  • AS '중성화' 절로 컬럼의 이름을 커스터마이징 해줍니다.
  • 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있으므로 이 조건을 사용해 문제를 풀면 됩니다
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

입양 시각 구하기(1)

/*
SELECT HOUR(DATETIME) AS HOUR
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR(DATETIME) ORDER BY HOUR ASC;
*/

SELECT HOUR(DATETIME) AS HOUR,COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR(DATETIME) ORDER BY HOUR ASC;
profile
Sorbet is good...!

0개의 댓글