database

Programmers SQL 고득점 Kit 풀기 - SELECT(2)

fladi 2025. 1. 13. 00:32
728x90

 

이전 글

https://fladi.tistory.com/440

 

이전 글에 이어서 계속 문제를 풀려고 한다. 하루 2개씩이라도 꾸준히 하는 것이 목표이다! 문제들이 있는 링크는 아래와 같다. 

https://school.programmers.co.kr/learn/courses/30/parts/17042

 

 

 

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

SELECT USER_ID, PRODUCT_ID FROM ONLINE_SALE 
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC
  • group by와 having, count를 안다면 어렵지 않게 풀 수 있다

 

 

2. 모든 레코드 조회하기

SELECT ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
  • order by만 알면 되는 문제다

 

 

3. 역순 정렬하기

SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;
  • 쉽다

 

 

4. 오프라인/온라인 판매 데이터 통합하기

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE MONTH(SALES_DATE) = 3 and YEAR(SALES_DATE) = 2022

UNION

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, null, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE MONTH(SALES_DATE) = 3 and YEAR(SALES_DATE) = 2022

ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC;
  • union은 중복값을 포함하지 않는다. 동일한 날짜, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재한다고 하였으니 union을 사용하면 된다.

 

 

5. 아픈 동물 찾기

SELECT ANIMAL_ID, NAME 
FROM ANIMAL_INS 
WHERE INTAKE_CONDITION = "Sick"
ORDER BY ANIMAL_ID;
  • 쉽다

 

 

6. 어린 동물 찾기

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS 
WHERE INTAKE_CONDITION  != 'Aged'
ORDER BY ANIMAL_ID ASC
  • !=

 

 

7. 동물의 아이디와 이름

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID

 

 

8. 여러 기준으로 정렬하기

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

 

 

9. 상위 n개 레코드

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME ASC 
LIMIT 1
SELECT NAME
FROM (SELECT NAME
    FROM ANIMAL_INS
    ORDER BY DATETIME ASC )
WHERE ROWNUM =1;
  • 오라클은 ROWNUM을 이용해서 첫 번째 값을 조회가능하다. limit사용이 안됨

 

 

10. 조건에 맞는 회원수 구하기

SELECT COUNT(*) as USERS 
FROM USER_INFO
WHERE YEAR(JOINED) = 2021
AND AGE > 19 AND AGE < 30
  • count를 사용하면 된다

 

 

 

728x90