💥 CODEKATA
~ 86문제
팀프로젝트 시작해서 이제 당분간 코드카타 못할 듯 싶음
86) 1661. Average Time of Process per Machine
# 내코드
WITH start AS (
SELECT *
FROM activity
WHERE activity_type = "start"
),
end AS (
SELECT *
FROM activity
WHERE activity_type = "end"
)
SELECT e.machine_id, ROUND(SUM(e.timestamp - s.timestamp) / COUNT(1), 3) AS processing_time
FROM start s JOIN end e ON s.machine_id = e.machine_id AND s.process_id = e.process_id
GROUP BY e.machine_id
# 답코드
SELECT a.machine_id,
ROUND(AVG(b.timestamp - a.timestamp), 3) AS processing_time
FROM Activity a, Activity b
WHERE
a.machine_id = b.machine_id AND a.process_id = b.process_id AND
a.activity_type = 'start' AND b.activity_type = 'end'
GROUP BY machine_id
SQL 강의에서 나왔던 문제들을 다시 풀어보았음
🔰 SQL 4차 과제
https://teamsparta.notion.site/SQL-_4-2492dc3ef5148079bf4dd5fe0736de86?source=copy_link
s1.csv / s2.csv 필요
# [250813] 9일차 코드
select a.gb, count(distinct a.game_account_id) as usercnt
from
(
select u.game_account_id, p.pay_amount,
case
when p.pay_amount > 0 then '결제함'
else '결제안함'
end as gb
from users u left join (
select pay_amount, game_account_id
from payment
) p on u.game_account_id = p.game_account_id
order by p.pay_amount
) a
group by a.gb
# [250903] 22일차 코드
SELECT
CASE
WHEN p.pay_type IS NOT NULL THEN "결제함"
ELSE "결제안함"
END gb, COUNT(DISTINCT u.game_account_id) AS usercnt
FROM testdb.users u LEFT JOIN testdb.payment p ON u.game_account_id = p.game_account_id
GROUP BY
CASE
WHEN p.pay_type IS NOT NULL THEN "결제함"
ELSE "결제안함"
END
⇒
와 처음에 쓴 코드 다시 보니까 쓸데없이 서브쿼리 3개나 썼음 ㄷㄷ;
https://school.programmers.co.kr/learn/courses/30/lessons/59045
# [250819] 11일차 (2) 에서 푼 코드
select a.animal_id, a.animal_type, a.name
from (
SELECT ai.animal_id, ai.animal_type, ai.name, ai.sex_upon_intake, ao.sex_upon_outcome,
ai.sex_upon_intake != ao.sex_upon_outcome as new_sex_upon
from animal_ins ai left join animal_outs ao on ai.animal_id = ao.animal_id
) a
where a.new_sex_upon = 1
# 250903 22일차에 푼 코드 (1)
# 근데 너무 문자열 하드코딩인 것 같아서 바꿔보기로 함
SELECT i.animal_id, i.animal_type, i.name
FROM animal_ins i LEFT JOIN animal_outs o ON i.animal_id = o.animal_id
WHERE i.sex_upon_intake LIKE "Intact%" AND o.sex_upon_outcome NOT LIKE "Intact%"
# # 250903 22일차에 푼 코드 (2)
# 생각해보니 들어올 땐 중성화인데 나갈 때는 다시 붙일 수 없으니(?) 같지 않다로만 찾아도 됨
SELECT i.animal_id, i.animal_type, i.name
FROM animal_ins i LEFT JOIN animal_outs o ON i.animal_id = o.animal_id
WHERE i.sex_upon_intake != o.sex_upon_outcome
⇒
확실히 코드카타의 힘이 느껴진다.
처음 풀었을 때의 코드보다 훨씬 가독성있고 간결해짐
'Sparta > CODEKATA' 카테고리의 다른 글
| [250916] 스파르타코딩 본캠프 31일차 (2) | 2025.09.16 |
|---|---|
| [250915] 스파르타코딩 본캠프 30일차 (0) | 2025.09.15 |
| [250903] 스파르타코딩 본캠프 22일차 (0) | 2025.09.03 |
| [250902] 스파르타코딩 본캠프 21일차 (0) | 2025.09.02 |
| [250901] 스파르타코딩 본캠프 20일차 (2) (0) | 2025.09.01 |