코딩문제풀이/SQL
오늘밤공부
2023. 7. 21. 11:00
2023. 7. 21. 11:00
🗓️ 문제 설명
- Products 테이블의 product_id, new_price, change_date는 각각 상품ID, 새로운 가격, 가격 변동 일자를 나타냅니다.
- product_id와 change_date는 해당 테이블의 기본키입니다.
Column name |
Type |
product_id |
int |
new_price |
int |
change_date |
date |
❓문제
- 2019년 8월 16일에 모든 상품 가격을 찾는 SQL문을 작성해주세요.
- 변경전 모든 상품의 가격은 10이라고 가정합니다.
- 문제 예시
product_id |
new_price |
change_date |
1 |
20 |
2019-08-14 |
2 |
50 |
2019-08-14 |
1 |
30 |
2019-08-15 |
1 |
35 |
2019-08-16 |
2 |
65 |
2019-08-17 |
3 |
20 |
2019-08-18 |
product_id |
price |
2 |
50 |
1 |
35 |
3 |
10 |
💻 코드
최종 코드
코드 풀이
오늘밤공부
2023. 7. 17. 10:54
2023. 7. 17. 10:54
🗓️ 문제 설명
- Views 테이블의 article_id, author_id, viewer_id, view_date는 각각 아티클ID, 작가ID, 독자ID, 읽은 날짜를 나타냅니다.
- Views 테이블은 기본키가 없고, 중복된 값이 있을 수 있습니다.
Column name |
Type |
article_id |
int |
author_id |
int |
viewer_id |
int |
view_date |
date |
❓문제
- 자신이 쓴 아티클을 최소 한 번이상 읽은 작가의 ID를 조회하는 SQL문을 작성해주세요.
- 결과는 id순으로 오름차순 정렬해주세요.
- 문제 예시
article_id |
author_id |
viewer_id |
view_date |
1 |
3 |
5 |
2019-08-01 |
1 |
3 |
6 |
2019-08-02 |
2 |
7 |
7 |
2019-08-01 |
2 |
7 |
6 |
2019-08-02 |
4 |
7 |
1 |
2019-07-22 |
3 |
4 |
4 |
2019-07-21 |
3 |
4 |
4 |
2019-07-21 |
💻 코드
최종 코드
코드 풀이
오늘밤공부
2023. 7. 14. 11:09
2023. 7. 14. 11:09
🗓️ 문제 설명
- Movies 테이블의 movie_id, title은 각각 영화ID, 영화 제목을 나타냅니다.
- movie_id는 해당 테이블의 기본키입니다.
Column Name |
Type |
movie_id |
int |
title |
varchar |
- Users 테이블의 user_id, name은 각각 유저ID, 유저이름을 나타냅니다.
- user_id는 해당 테이블의 기본키입니다.
Column Name |
Type |
user_id |
int |
name |
varchar |
- MovieRating 테이블의 movie_id, user_id, rating, created_at는 각각 영화ID, 유저ID, 평점, 기록날짜를 나타냅니다.
- movie_id와 user_id는 해당 테이블의 기본키입니다.
Column Name |
Type |
movie_id |
int |
user_id |
int |
rating |
int |
created_at |
date |
❓문제
- 가장 많은 영화에 리뷰를 작성한 유저 이름과 2020년 2월에 가장 높은 평균 평점을 갖는 영화 제목을 조회하는 SQL문을 작성해주세요.
- 가장 많은 영화에 리뷰를 작성한 유저가 둘 이상인 경우, 사전순으로 정렬했을 때 위에 표시되는 유저 이름을 조회해주세요.
- 가장 높은 평균 평점을 갖는 영화가 둘 이상인 경우, 사전순으로 정렬했을 때 위에 표시되는 영화 제목을 조회해주세요.
- 문제 예시
Movies
movie_id |
title |
1 |
Avengers |
2 |
Frozen 2 |
3 |
Joker |
Users
user_id |
name |
1 |
Daniel |
2 |
Monica |
3 |
Maria |
4 |
James |
MovieRating
movie_id |
user_id |
rating |
created_at |
1 |
1 |
3 |
2020-01-12 |
1 |
2 |
4 |
2020-02-11 |
1 |
3 |
2 |
2020-02-12 |
1 |
4 |
1 |
2020-01-01 |
2 |
1 |
5 |
2020-02-17 |
2 |
2 |
2 |
2020-02-01 |
2 |
3 |
2 |
2020-03-01 |
3 |
1 |
3 |
2020-02-22 |
3 |
2 |
4 |
2020-02-25 |
💻 코드
최종 코드
코드 풀이
오늘밤공부
2023. 7. 10. 11:03
2023. 7. 10. 11:03
🗓️ 문제 설명
- Activity 테이블의 user_id, session_id, activity_date, activity_type은 각각 유저ID, 세션ID, 활동일자, 활동종류를 나타냅니다.
- Activity에는 기본키가 없으며 중복값이 있을 수 있습니다.
- 활동종류(activity_type)에는 open_session(세션 시작), end_session(세션 끝), scroll_down(스크롤내림), send_message(메시지 발송)이 있습니다.
- 해당 테이블은 소셜 미디어 웹사이트에 대한 사용자 활동을 보여줍니다.
- 각 세션은 정확히 한 명의 사용자에게 속합니다.
Column name |
Type |
user_id |
int |
session_id |
int |
activity_date |
date |
activity_type |
enum |
❓문제
- 2019년 7월 27일을 포함한 날까지 30일 동안 일일 활성 사용자 수를 찾는 SQL 쿼리를 작성해주세요.
- 해당 날짜에 활동을 한 번 이상 수행한 사용자는 언젠가는 활동한 것입니다.
- 문제 예시
user_id |
session_id |
activity_date |
activity_type |
1 |
1 |
2019-07-20 |
open_session |
1 |
1 |
2019-07-20 |
scroll_down |
1 |
1 |
2019-07-20 |
end_session |
2 |
4 |
2019-07-20 |
open_session |
2 |
4 |
2019-07-21 |
send_message |
2 |
4 |
2019-07-21 |
end_session |
3 |
2 |
2019-07-21 |
open_session |
3 |
2 |
2019-07-21 |
send_message |
3 |
2 |
2019-07-21 |
end_session |
4 |
3 |
2019-06-25 |
open_session |
4 |
3 |
2019-06-25 |
end_session |
day |
active_users |
2019-07-20 |
2 |
2019-07-21 |
2 |
💻 코드
최종 코드
코드 풀이
오늘밤공부
2023. 7. 6. 11:00
2023. 7. 6. 11:00
🗓️ 문제 설명
- Seat 테이블의 id, student는 각각 좌석 ID, 학생 이름을 나타냅니다.
- id는 기본키이며 연속적으로 증가합니다.
Column name |
Type |
id |
int |
student |
varchar |
❓문제
- 모든 연속된 두 학생의 좌석 ID를 변경해주세요.
- 만약 좌석 숫자가 홀수라면 마지막 학생은 좌석을 변경하지 않습니다.
- 문제 예시
id |
student |
1 |
Abbot |
2 |
Doris |
3 |
Emerson |
4 |
Green |
5 |
Jeames |
id |
student |
1 |
Doris |
2 |
Abbot |
3 |
Green |
4 |
Emerson |
5 |
Jeames |
💻 코드
최종 코드
코드 풀이
오늘밤공부
2023. 7. 3. 11:00
2023. 7. 3. 11:00
🗓️ 문제 설명
- Tree 테이블의 id, p_id는 각각 노드의 ID, 부모 노드의 ID를 나타냅니다.
- id는 테이블의 기본키입니다.
- 주어진 구조는 항상 유효합니다.
Column name |
Type |
id |
int |
p_id |
int |
❓문제
- 트리의 각 노드는 3가지 유형 중 1가지를 나타냅니다.
- 'Leaf' : 노드가 리프 노드인 경우
- 'Root' : 노드가 트리의 루트인 경우
- 'Inner' : 노드가 리프 노드와 루트 노드가 아닌 경우
- 트리의 각 노드 유형을 조회하는 SQL 문을 작성해주세요.
- 문제 예시
id |
p_id |
1 |
null |
2 |
1 |
3 |
1 |
4 |
2 |
5 |
2 |
id |
type |
1 |
Root |
2 |
Inner |
3 |
Leaf |
4 |
Leaf |
5 |
Leaf |
💻 코드
최종 코드
코드 풀이
오늘밤공부
2023. 6. 29. 10:59
2023. 6. 29. 10:59
🗓️ 문제 설명
- Users 테이블의 user_id, join_date, favorite_brand는 각각 고객 ID, 가입날짜, 좋아하는 브랜드를 나타냅니다.
- User_id는 기본키입니다.
Column name |
Type |
user_id |
int |
join_date |
date |
favorite_brand |
varchar |
- Orders 테이블의 order_id, order_date, item_id, buyer_id, seller_id는 각각 주문ID, 주문날짜, 제품ID, 구매자ID, 판매자ID를 나타냅니다.
- Order_id는 기본키이고, buyer_id, seller_id는 user 테이블의 외래키이고, item_id는 item 테이블의 외래키입니다.
Column name |
Type |
order_id |
int |
order_date |
date |
item_id |
int |
buyer_id |
int |
seller_id |
int |
- Item 테이블의 item_id, item_brand는 각각 제품ID, 제품 브랜드를 나타냅니다.
- Item_id는 기본키입니다.
Column name |
Type |
item_id |
int |
item_brand |
varchar |
❓문제
- 각 사용자와 가입날짜, 2019년에 주문이 이루어진 수를 SQL문으로 작성해주세요.
- 문제 예시
USERS
user_id |
join_date |
favorite_brand |
1 |
2018-01-01 |
Lenovo |
2 |
2018-02-09 |
Samsung |
3 |
2018-01-19 |
LG |
4 |
2018-05-21 |
HP |
ORDERS
order_id |
order_date |
item_id |
buyer_id |
seller_id |
1 |
2019-08-01 |
4 |
1 |
2 |
2 |
2018-08-02 |
2 |
1 |
3 |
3 |
2019-08-03 |
3 |
2 |
3 |
4 |
2018-08-04 |
1 |
4 |
2 |
5 |
2018-08-04 |
1 |
3 |
4 |
6 |
2019-08-05 |
2 |
2 |
4 |
ITEMS
item_id |
item_brand |
1 |
Samsung |
2 |
Lenovo |
3 |
LG |
4 |
HP |
buyer_id |
join_date |
orders_in_2019 |
1 |
2018-01-01 |
1 |
2 |
2018-02-09 |
2 |
3 |
2018-01-19 |
0 |
4 |
2018-05-21 |
0 |
💻 코드
최종 코드
코드 풀이
오늘밤공부
2023. 6. 26. 11:00
2023. 6. 26. 11:00
🗓️ 문제 설명
- Studens 테이블의 ID, Name, Marks는 각각 학생 ID, 학생 이름, 점수를 나타냅니다.
Column |
Type |
ID |
Integer |
Name |
String |
Marks |
Integer |
- Grades 테이블의 Grade, Min_Mark, Max_Mark는 각각 등급, 최소 점수, 최대 점수를 나타냅니다.
Grade |
Min_Mark |
Max_Mark |
1 |
0 |
9 |
2 |
10 |
19 |
3 |
20 |
29 |
4 |
30 |
39 |
5 |
40 |
49 |
6 |
50 |
59 |
7 |
60 |
69 |
8 |
70 |
79 |
9 |
80 |
89 |
10 |
90 |
100 |
❓문제
- 각 학생의 이름과 등급, 점수를 조회하는 SQL문을 작성해주세요.
- 8등급 미만의 학점을 받은 학생들은 이름을 Null로 표시합니다.
- 등급별로 내림차순 정렬을 해주시고, 등급이 같을 경우에는 이름 순으로 정렬해주세요.
- 8등급 이하의 학생들은 등급별로 내림차순 정렬을 해주시고, 점수를 기준으로 오름차순 정렬을 해주세요.
- 문제 예시
Students
ID |
Name |
Marks |
1 |
Julia |
88 |
2 |
Samantha |
68 |
3 |
Maria |
99 |
4 |
Scarlet |
78 |
5 |
Ashley |
63 |
6 |
Jane |
81 |
Name |
Grade |
Marks |
Maria |
10 |
99 |
Jane |
9 |
81 |
Julia |
9 |
88 |
Scarlet |
8 |
78 |
NULL |
7 |
63 |
NULL |
7 |
68 |
💻 코드
최종 코드
코드 풀이
오늘밤공부
2023. 6. 22. 11:00
2023. 6. 22. 11:00
🗓️ 문제 설명
- Project 테이블의 project_id, employee_id는 각각 프로젝트ID, 직원ID를 나타냅니다.
- Project_id, employee_id는 기본키이며, employee_id는 Employee 테이블의 외래키입니다.
Column name |
Type |
project_id |
int |
employee_id |
int |
- Employee 테이블의 employee_id, name, experience_years는 각각 직원ID, 직원이름, 경력 년수를 나타냅니다.
- Employee_id는 기본키입니다.
❓문제
- 각 프로젝트에 대한 모든 직원의 평균 경력 년수를 두 번째 자리에서 반올림하여 조회하는 SQL문을 작성해주세요.
- 문제 예시
Project
project_id |
employee_id |
1 |
1 |
1 |
2 |
1 |
3 |
2 |
1 |
2 |
4 |
Employee
employee_id |
name |
experience_years |
1 |
Khaled |
3 |
2 |
Ali |
2 |
3 |
John |
1 |
4 |
Doe |
2 |
project_id |
average_years |
1 |
2.00 |
2 |
2.50 |
💻 코드
최종 코드
코드 풀이
오늘밤공부
2023. 6. 19. 11:00
2023. 6. 19. 11:00
🗓️ 문제 설명
- Sales 테이블의 sale_id, product_id, year, quantity, price는 각각 판매ID, 상품ID, 판매연도, 판매량, 판매액을 나타냅니다.
- Sale_id, year는 기본키이며, product_id는 Product 테이블의 외래키입니다.
- Price는 개당 가격입니다.
Column name |
Type |
sale_id |
int |
product_id |
int |
year |
int |
quantity |
int |
price |
int |
- Product 테이블의 product_id, product_name은 각각 상품ID, 상품명을 나타냅니다.
- Product_id는 기본키입니다.
Column name |
Type |
product_id |
int |
product_name |
varchar |
❓문제
- 각 상품별로 처음 판매된 상품의 상품ID, 판매연도, 판매량, 판매액을 조회하는 SQL문을 작성해주세요.
- 문제 예시
Sales
sale_id |
product_id |
year |
quantity |
price |
1 |
100 |
2008 |
10 |
5000 |
2 |
100 |
2009 |
12 |
5000 |
7 |
200 |
2011 |
15 |
9000 |
Product
product_id |
product_name |
100 |
Nokia |
200 |
Apple |
300 |
Samsung |
product_id |
first_year |
quantity |
price |
100 |
2008 |
10 |
5000 |
200 |
2011 |
15 |
9000 |
💻 코드
최종 코드
코드 풀이