위 링크에서 JOIN 문제를 풀고 풀이를 기록하는 게시글입니다.
1. 주문량이 많은 아이스크림들 조회하기
- 주문량이 많은 순으로 3개만조회하기위해 인라인문으로 ORDER BY한 것을 받아와서, WHERE절에 ROWNUM칼럼을 사용해서 조회한다.
SELECT FLAVOR
FROM(
SELECT FLAVOR
FROM (
SELECT FLAVOR, SUM(TOTAL_ORDER) TOTAL
FROM JULY
GROUP BY FLAVOR
UNION ALL
SELECT FLAVOR, SUM(TOTAL_ORDER) TOTAL
FROM FIRST_HALF
GROUP BY FLAVOR)
GROUP BY FLAVOR
ORDER BY SUM(TOTAL) DESC)
WHERE ROWNUM < 4
2. 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
- 다시풀어볼만한 문제!
- 여러테이블에 중복되는 조건은 join 후 한번에 처리하자.
- A기간이 B기간에 겹치는지 알기 위한 공식을 외워두자.
A.END >= B.START AND A.START < B.END+1
- %라고 되어있어도 INTEGER일 수있다 자료형 확인하고 괜한 처리하지말자!!!
- 20% 할인이라고해서 0.2를 곱한다고 끝나는게 아니다. 원가에서 0.2를 곱한 값을 빼줘야하는거다.
- 또는 원가에 0.8을 곱해야하는것!!!
- BETWEEN AND보다 <= >= 가 더 직관적일 수있다. BETWEEN은 반드시 포함되기 때문에 포함되지 않는조건 쓸 때 힘들다.
SELECT A.CAR_ID, A.CAR_TYPE, ROUND(A.DAILY_FEE * (100-B.DISCOUNT_RATE)/100) * 30 FEE
FROM (SELECT CAR_ID,CAR_TYPE, DAILY_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_ID NOT IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE END_DATE >= TO_DATE('2022-11-01','YYYY-MM-DD')
AND START_DATE < TO_DATE('2022-12-01','YYYY-MM-DD'))) A,CAR_RENTAL_COMPANY_DISCOUNT_PLAN B
WHERE A.CAR_TYPE = B.CAR_TYPE
AND A.CAR_TYPE IN ('세단','SUV')
AND B.DURATION_TYPE = '30일 이상'
AND ROUND(A.DAILY_FEE * (100-B.DISCOUNT_RATE)/100) * 30 >= 500000
AND ROUND(A.DAILY_FEE * (100-B.DISCOUNT_RATE)/100) * 30 < 2000000
ORDER BY 3 DESC, 2,1 DESC
3. FrontEnd 개발자 찾기
- & 비트연산 조인할 떄 출력값을 ID하나만 출력해야하니까 DISTINCT를 사용해서 하나만 출력해준다.
SELECT DISTINCT(B.ID), B.EMAIL,B.FIRST_NAME, B.LAST_NAME
FROM SKILLCODES A RIGHT JOIN DEVELOPERS B
ON A.CODE & B.SKILL_CODE
WHERE A.CATEGORY = 'Front End'
ORDER BY 1
'SQL 고득점 Kit 문제풀이' 카테고리의 다른 글
데이터 베이스 제 4정규형 다치 종속 제거 (0) | 2024.07.04 |
---|---|
프로그래머스 SQL 고득점 Kit - String, Date 문제 풀이 (Oracle) (0) | 2023.12.26 |
프로그래머스 SQL 고득점 Kit - IS NULL 문제 풀이 (Oracle) (0) | 2023.12.26 |
프로그래머스 SQL 고득점 Kit - GROUP BY 문제 풀이 (Oracle) (0) | 2023.12.26 |
프로그래머스 SQL 고득점 Kit - SUM,MAX,MIN 문제 풀이 (Oracle) (0) | 2023.12.26 |