본문 바로가기

[공부] SQL

[SQL 코딩테스트] 프로그래머스 SELECT 정답 (2)

두 번째 날. 다른거 하기 싫어서 코딩테스트로 도망 옴(?) 아직까지는 재밌다는 뜻.

오늘은 실제로 시간이 얼마나 걸렸는지 재보려고 한다.


재구매가 일어난 상품과 회원 리스트 구하기
#HAVING

 

WHERE절이 아닌 HAVING절에서 조건 걸기!

 

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(PRODUCT_ID) <> 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC
;

 

 

 

모든 레코드 조회하기
#ORDERBY

 

너무 쉬워서 당황한 문제... 이런건 1번에 넣어달라구?

SELECT  *
  FROM  ANIMAL_INS
 ORDER
    BY  ANIMAL_ID
  ;

 

오프라인/온라인 판매 데이터 통합하기
#UNION ALL

 

이제 이정도는 간단하쥬

* 'NULL' 아니고 NULL 그대로 써야 함

WITH ALL_SALES AS (SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE

UNION ALL

SELECT SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
)

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
        PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ALL_SALES
WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03'
ORDER BY 1,2,3
역순 정렬하기
#ORDERBY

 

SELECT  NAME, DATETIME
  FROM  ANIMAL_INS
 ORDER
    BY  ANIMAL_ID DESC
  ;

 

아픈 동물 찾기
#WHERE

 

SELECT  ANIMAL_ID, NAME
  FROM  ANIMAL_INS
 WHERE INTAKE_CONDITION = 'SICK'
 ORDER
    BY ANIMAL_ID
  ;

 

어린 동물 찾기
#WHERE #연산자
SELECT  ANIMAL_ID, NAME
  FROM  ANIMAL_INS
 WHERE  INTAKE_CONDITION <> 'AGED'
 ORDER
    BY  ANIMAL_ID
  ;

 

동물의 아이디와 이름
#SELECT #ORDERBY
SELECT  ANIMAL_ID, NAME
  FROM  ANIMAL_INS
 ORDER
    BY  ANIMAL_ID
  ;

 

여러 기준으로 정렬하기
#ORDERBY
SELECT  ANIMAL_ID, NAME, DATETIME
  FROM  ANIMAL_INS
 ORDER
    BY  NAME, DATETIME DESC
  ;

 

상위 n개 레코드
#WINDOW #RANK

 

윈도우 함수 복습!

SELECT  NAME
  FROM  (SELECT  NAME, 
                 RANK() OVER (ORDER BY DATETIME) AS DATE_RANK
           FROM  ANIMAL_INS) A
 WHERE  DATE_RANK = '1'
 ;

 

아래는 너무나 똑똑한 챗GPT를 이용해 정리한 주로 쓰이는 윈도우 함수에 대한 설명.

챗GPT가 알려주는 SQL 윈도우 함수 : RANK, DENSE_RANK, ROW_NUMBER

 

조건에 맞는 회원수 구하기
#COUNT #BETWEEN

 

한 방에 정답 맞췄을 때의 짜릿함...✨

SELECT  COUNT(USER_ID) USERS
  FROM  USER_INFO
 WHERE  YEAR(JOINED) = 2021 AND AGE BETWEEN 20 AND 29
  ;

 


 

오늘은 대부분 너무 쉬운 문제가 많았어서 휘리릭 풀었는데, 총 1시간 반 정도 걸렸다.

중간에 윈도우함수 공부하느라 유튜브, 챗GPT 쓰는 데에 30분 정도 소요된 걸 감안해도 생각보다 꽤 걸렸는데...

앞으로 다 잊어먹은 JOIN, SUBQUARY 이런거 나오면 시간이 얼마나 걸릴까 좀 무서워졌다...

 

아무튼 2일차도 끝!