TIL 14일차 : limit, group by having, 미니 1일차, 코드 2일차

2023. 12. 19. 19:01회고/TIL(매일)

 

도전한 점

  • 미니 프로젝트 데이터 분석 회의
  • 팀노션 보기 좋게 정리
  • 데이터 분석 강의 듣기
  • SQL 코드카타 5문제 풀이

 

  • 실습 1. 아픈 동물 찾기 : WHERE절 이용하기
SELECT ANIMAL_ID,
       NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID

 

  • 실습 2. 어린 동물 찾기 : WHERE절 다음에 <>, !=, NOT LIKE 모두 정답이다.
SELECT ANIMAL_ID,
       NAME
FROM ANIMAL_INS 
WHERE INTAKE_CONDITION <> 'Aged'
ORDER BY ANIMAL_ID

 

  • 실습 3. 최솟값 구하기 : MIN, LIMIT도 가능하다.
SELECT MIN(DATETIME) TIME
FROM ANIMAL_INS

SELECT DATETIME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1

 

*LIMIT N : 상위 N개의 데이터 행을 보여줘라는 의미이다.

*LIMIT N OFFSET M : M번째 까지는 읽지 말고 그 다음부터 세라.

 

  • 실습 4. 동명 동물 수 찾기 : 서브쿼리, GROUP BY HAVING을 이용한다.
SELECT NAME,
       COUNT
FROM
(
SELECT NAME,
       COUNT(NAME) COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL -> 누락 체크
GROUP BY 1
) A
WHERE COUNT>=2
ORDER BY 1 -> 누락 체크

SELECT NAME,
       COUNT(NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) >= 2 -> 그룹화 된 테이블에 특정 조건을 필터링하는 기능
ORDER BY NAME

 

 

*GROUP BY HAVING : 그룹화 된 테이블을 조건으로 데이터 행을 필터링 해주는 역할을 한다.

*WHERE : SELECT 되지 않은 컬럼이라 하더라도 FROM 에 속해있으면 출력된다. 는 차이(?)

 

SELECT NAME,
       COUNT(NAME) COUNT
FROM ANIMAL_INS
WHERE COUNT(NAME) >= 2

 

*WHERE 조건을 FROM 테이블에서 찾을 수가 없으니까 틀린거다. 알겠지.

 

  • 실습 5. 상위 N개 레코드 : 서브쿼리나 LIMIT 이용, 배운 내용으로 랭크 가능!
SELECT NAME
FROM ANIMAL_INS
WHERE MIN(DATETIME) -> 틀림

SELECT NAME
FROM ANIMAL_INS
WHERE DATETIME = 
(
SELECT MIN(DATETIME)
FROM ANIMAL_INS
) -> 서브쿼리

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1 -> 리미트

SELECT NAME
FROM
(
SELECT NAME,
       RANK() OVER(ORDER BY DATETIME) RK
FROM ANIMAL_INS
) A
WHERE RK=1 -> 랭크

 

*서브쿼리만 출력하면

SELECT MIN(DATETIME) FROM ANIMAL_INS

 

따라서 코드를 해석하면

SELECT NAME FROM ANIMAL_INS : 이름만 찾아주는데 조건이 있다.
WHERE DATETIME = (서브쿼리) : DATETIME 의 값이 2013-10-14 이하인 것만 찾아줘.


좋았던 점


아쉬운 점

  • 내 진도는 아직 거기가 아닌데ㅠㅠ 벌써 프로젝트를 하려니 컴퓨터의 힘을 빌려도 힘들다.


잊지말 점

  • LIMIT, HAVING 함수를 이용하니까 너무나 편하구나.


시도할 점

  • 데이터 분석 결과 발표 및 시각화 회의