<aside> 👉 셋팅 안내
</aside>
<aside> 👉 제출 안내
</aside>
https://notion-widget-kit.vercel.app/timer?목표일=20250103&목표시간=1500&글꼴번호=2&크기=20&굵기=3&머리말=✅제출까지&꼬리말=남음🔥&외부간격=20&내부간격=10&배경색=White&글자색=Black
<aside> ✅
선행 커맨드: use qcc;
</aside>
<aside> ◾
movies
테이블은 영화에 대한 정보를 담고 있습니다. 테이블 구조는 다음과 같으며,
MOVIE_ID, GENRES, TITLE, POPULARITY, RELEASE_YEAR, REVENUE, VOTE_AVERAGE, VOTE_COUNT은 각각 영화 ID, 영화 장르 리스트, 영화 제목, 인기도, 개봉 연도, 매출, 평균 평점, 평점 수을 나타냅니다.
컬럼명 | 타입 | 설명 |
---|---|---|
MOVIE_ID | INT | 영화 ID (PK) |
GENRES | JSON | 영화 장르 리스트 |
TITLE | TEXT | 영화 제목 |
POPULARITY | FLOAT | 인기도 |
RELEASE_YEAR | BIGINT | 개봉 연도 |
REVENUE | BIGINT | 매출 |
VOTE_AVERAGE | FLOAT | 평균 평점 |
VOTE_COUNT | INT | 평점 수 |
2012년 이후 개봉한 영화 중, 장르가 2개 이상 포함된 영화의 연도별 매출을 구하는 SQL 문을 작성해주세요. 단, 해당 영화는 최소 100개 이상의 평점 수를 받은 경우만 결과에 포함해주세요. 결과는 개봉 연도를 기준으로 오름차 정렬해야 합니다.
movies
테이블이 다음과 같다면 :
movie_id | genres | title | popularity | release_year | revenue | vote_average | vote_count |
---|---|---|---|---|---|---|---|
1 | [{“id”: 28, “name”: “Action”}, {“id”: 35, “name”: “Comedy”}] | Movie H | 11 | 2010 | 100 | 10 | 1000 |
2 | [{“id”: 28, “name”: “Action”}] | Movie A | 10 | 2020 | 1000 | 8.5 | 100 |
3 | [{“id”: 28, “name”: “Action”}, {“id”: 35, “name”: “Comedy”}] | Movie B | 12 | 2020 | 1000 | 9 | 120 |
4 | [{“id”: 28, “name”: “Action”}, {“id”: 35, “name”: “Comedy”}] | Movie C | 15 | 2021 | 1100 | 7 | 150 |
5 | [{“id”: 28, “name”: “Action”}, {“id”: 35, “name”: “Comedy”}] | Movie D | 12 | 2021 | 1300 | 8 | 200 |
다음과 같이 결과 출력이 되어야 합니다.
(해당 테이블은 예시이며, 실제 정답과 다를 수 있습니다.)
+) 힌트 : JSON_LENGTH(*)
함수로 JSON 객체나 배열의 길이를 계산할 수 있습니다.
release_year | revenue |
---|---|
2020 | 1000 |
2021 | 2400 |
</aside> |
<aside> ◾
SalesOrderHeader
테이블은 판매 주문에 대한 정보를 담고 있습니다.
테이블 구조는 다음과 같으며, SalesOrderID, CustomerID, OrderDate, TotalDue는
각각 판매 주문 ID, 고객 ID, 주문 날짜, 총 결제 금액을 나타냅니다.
컬럼명 | 타입 | 설명 |
---|---|---|
SalesOrderID | INT | 판매 주문 ID (PK) |
CustomerID | INT | 고객 ID |
OrderDate | DATETIME | 주문 날짜 |
TotalDue | DOUBLE | 총 결제 금액 |
각 고객의 총 결제 금액(TotalDue)을 계산하고, 결제 금액을 기준으로 순위를 매기세요. 결제 금액이 같은 고객은 같은 순위를 가져야 합니다. 결과는 총 결제 금액이 높은 순으로 내림차 정렬하되, 동일한 금액일 경우 고객 ID 기준으로 오름차 정렬하여 상위 5순위의 고객 정보를 반환해야 합니다.
SalesOrderHeader
테이블이 다음과 같다 :
SalesOrderID | CustomerID | OrderDate | TotalDue |
---|---|---|---|
1 | 101 | 1/1/23 | 150 |
2 | 102 | 1/2/23 | 200 |
3 | 101 | 1/10/23 | 250 |
4 | 103 | 1/15/23 | 200 |
5 | 104 | 2/1/23 | 150 |
다음과 같이 결과 출력이 되어야 합니다. (해당 테이블은 예시이며, 실제 정답과 다를 수 있습니다.)
CustomerID | TotalOrderAmount | rn |
---|---|---|
101 | 400 | 1 |
102 | 200 | 2 |
103 | 200 | 2 |
104 | 150 | 3 |
</aside> |
<aside> ◾
membership_history
테이블은 고객의 멤버십 가입 및 탈퇴 이벤트를 저장합니다.
고객이 멤버십에 가입하거나 탈퇴한 날짜가 기록됩니다.
컬럼명 | 타입 | 설명 |
---|---|---|
customer_id | INT | 고객 ID (PK) |
event_type | VARCHAR | 이벤트 유형 (‘JOIN’, ‘WITHDRAW’) |
event_date | DATE | 이벤트 발생 날짜 |
Slowly Changing Dimension(SCD) Type 2 형식의 데이터 테이블을 생성하는 SQL 문을 작성하세요.
[SCD Type 2란 무엇인가?] 데이터 변경 이력을 추적하기 위해 기존 데이터를 수정하지 않고, 변경된 상태를 별도의 새로운 행으로 추가하는 방식입니다. 각 행에는 상태 시작 날짜, 종료 날짜, 그리고 현재 활성 상태를 나타내는 정보가 포함되며, 과거와 현재 상태를 명확히 구분할 수 있습니다.
SCD Type 2 결과 형식
컬럼명 | 타입 | 설명 |
---|---|---|
customer_id | INT | 고객 ID |
status | VARCHAR | 멤버십 상태 (‘ACTIVE’, ‘INACTIVE’) |
start_date | DATE | 상태가 시작된 날짜 |
end_date | DATE | 상태가 끝난 날짜 (NULL이면 활성) |
current_flag | BOOLEAN | 현재 ACTIVE 및 활성 상태 여부 (1 = 활성) |
멤버십 상태 (status
)
기간 설정 (start_date
, end_date
)
start_date
는 이벤트 발생 날짜(event_date)로 설정합니다.end_date
는 다음 이벤트의 event_date의 전날로 설정합니다.end_date
가 NULL이어야 합니다.활성 상태 플래그 (current_flag
)
end_date
is NULL)인 경우 current_flag
를 1로 설정합니다.current_flag
를 0으로 설정합니다.정렬
customer_id
와 start_date
를 기준으로 오름차순 정렬합니다.</aside>
<aside> 👉 제출
</aside>