Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions unit8/question1_seohee.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/*
[질문]
고객이 원하는 배송 날짜(pref_delivery_date)가 주문 날짜(order_date)와 동일한 경우 immediate라고 하고, 그렇지 않으면 scheduled라고 합니다.
immediate 주문의 백분율(immediate_percentage)을 조회하는 SQL 쿼리를 작성합니다.
백분율은 소수점 이하 2자리로 반올림합니다.
*/

SELECT ROUND(SUM(CASE WHEN pref_delivery_date = order_date THEN 1 ELSE 0 END) / COUNT(*) * 100,
2) AS immediate_percentage
FROM delivery;
19 changes: 19 additions & 0 deletions unit8/question2_seohee.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
[질문]
버스를 타기 위해 사람들이 줄을 서고 있습니다.
다만 버스의 무게 제한은 1000kg이므로 탑승하지 못하는 사람도 있을 수 있습니다.
무게 제한을 초과하지 않고 버스에 탑승할 수 있는 마지막 사람(person_name)을 조회하는 SQL 쿼리를 작성합니다.
*/

SELECT p.person_name
FROM (
SELECT
turn,
person_name,
SUM(weight) OVER (ORDER BY turn) as prefix_sum_weight
FROM queue ) AS p
WHERE p.prefix_sum_weight <= 1000
ORDER BY turn DESC
LIMIT 1;

-- ORDER BY와 윈도우 함수를 처음 같이 써봤다.
11 changes: 11 additions & 0 deletions unit8/question3_seohee.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/*
[질문]
각 플레이어(player_id)와 날짜(event_date)별로 해당 날짜까지 플레이어가 플레이한 게임 총수(games_played_so_far)를 조회하는 SQL 쿼리를 작성합니다.
즉, 해당 날짜까지 플레이어가 플레이한 게임의 총합을 계산합니다.
*/

SELECT
player_id,
event_date,
SUM(games_played) OVER(PARTITION BY player_id ORDER BY event_date) AS games_played_so_far
FROM activity;
12 changes: 12 additions & 0 deletions unit9/question1_seohee.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/*
[질문]
각 기계(machine_id)가 프로세스를 완료하는데 걸리는 평균 시간(processing_time)을 조회하는 SQL 쿼리를 작성합니다.
평균 시간은 소수점 이하 3자리로 반올림합니다.
*/

SELECT machine_id,
ROUND((SUM(CASE WHEN activity_type = 'end' THEN timestamp END)
- SUM(CASE WHEN activity_type = 'start' THEN timestamp END))
/ COUNT(DISTINCT process_id), 3) AS processing_time
FROM activity
GROUP BY machine_id;
13 changes: 13 additions & 0 deletions unit9/question2_seohee.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/*
[질문]
각 직원(employee_id)의 보너스(bonus)를 조회하는 SQL 쿼리를 작성합니다.
employee_id를 기준으로 오름차순으로 정렬합니다. 보너스는 다음 규칙에 따라 계산됩니다.
- 직원 ID가 홀수이고 직원 이름(name)이 'M' 문자로 시작하지 않는 경우, 보너스는 소득(salary)의 100%입니다.
- 그 외에 나머지 모든 직원의 보너스는 0입니다.
*/

SELECT
employee_id,
CASE WHEN MOD(employee_id, 2) = 1 AND SUBSTR(name, 1, 1) != 'M' THEN salary ELSE 0 END AS bonus
FROM employees
ORDER BY employee_id;
12 changes: 12 additions & 0 deletions unit9/question3_seohee.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/*
[질문]
각 주식(stock_name)에 대해 이득, 손실 금액(capital_gain_loss)을 조회하는 SQL 쿼리를 작성합니다.
여기서 주식의 이득, 손실이란 주식을 매매한 후의 총이익 또는 총손실입니다.
단, 이득, 손실 가격(price)은 하나의 칼럼이며, 매도하면 이득 값, 매수하면 손실 값을 저장합니다.
*/

SELECT
stock_name,
SUM(CASE WHEN operation = 'SELL' THEN price END) - SUM(CASE WHEN operation = 'Buy' THEN price END) AS capital_gain_loss
FROM stocks
GROUP BY stock_name;
30 changes: 30 additions & 0 deletions unit9/question4_seohee.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
[질문]
각 소득 카테고리(category)의 은행 계좌 수(accounts_count)를 조회하는 SQL 쿼리를 작성합니다.
결과에 세 가지 카테고리가 모두 포함되어야 합니다. 카테고리에 계좌(account_id)가 없으면 0을 보고합니다. 소득 카테고리는 다음과 같습니다.
- 'Low Salary': 소득(income)이 $20000 미만입니다.
- 'Average Salary': 소득이 $[20000, 50000] 사이입니다.
- 'High Salary': 소득이 $50000보다 큽니다.
*/

SELECT
'Low Salary' AS category,
SUM(CASE WHEN income < 20000 THEN 1 ELSE 0 END) AS accounts_count
FROM accounts

UNION

SELECT
'Average Salary' AS category,
SUM(CASE WHEN income >= 20000 AND income <= 50000 THEN 1 ELSE 0 END)
FROM accounts

UNION

SELECT
'High Salary' AS category,
SUM(CASE WHEN income > 50000 THEN 1 ELSE 0 END)
FROM accounts;

-- 실수로 두 번째랑, 세 번째 SELECT문에 AS accounts_count를 제외하고 작성했는데 문제가 없었다.
-- UNION 문법 상 첫번째 SELECT 기준으로 별칭을 상속받고, 데이터 타입과 컬럼의 개수만 맞으면 그대로 합쳐진다는게 신기했다.