본문 바로가기
[스파르타코딩클럽]데이터분석 과정/SQL

[SQL 코드카타] 92~94번 (LeetCode)

by doo_ 2024. 1. 4.

(92번) average-selling-price

SELECT
    p.product_id,
    ROUND(SUM(p.price * uni.units)/SUM(uni.units),2) as average_price
    -- 4) avg_price 계산
FROM
    prices p
    JOIN unitsSold uni 
    ON p.product_id = uni.product_id --1) product_id에 맞춰서 조인하는데
    AND uni.purchase_date between p.start_date and end_date 
    -- 2) purchase_date가 start와 end 사이에 해당하게
GROUP BY
     p.product_id -- 3) product_id로 그룹화해서

 

(93번) project-employees-i

SELECT
    pro.project_id,
    avg(emp.experience_years) AS average_years -- 3) project별 employee들의 평균 avg
FROM
    Project AS pro
    JOIN Employee AS emp
    ON pro.employee_id = emp.employee_id -- 1) project_id에 맞춰서 조인
group by pro.project_id -- 2) project_id 그룹화

 

(94번) percentage-of-users-attended-a-contest

> 당연히 join문을 써서 푸는 문제로만 생각했는데, join을 쓰지 않고 푸는 것을 보고 아차 싶었다. 내가 푼 답에도 굳이 JOIN을 안 써도 됐었다.

> 현업에서 대량의 데이터를 다룰 때는 join을 쓰지 않는다고 한다.

SELECT
    reg.contest_id,
    ROUND(COUNT(reg.user_id)/ (SELECT COUNT(user_id)
    				FROM users) * 100,2) AS percentage
	-- 3) 연산하기
FROM
    Users us
    JOIN Register reg
    ON us.user_id = reg.user_id -- 1) name을 붙야주고
GROUP BY
    reg.contest_id -- 2) contset 그룹화해서
ORDER BY
    percentage desc, reg.contest_id asc
SELECT
    contest_id, 
    ROUND(COUNT(user_id) * 100 /(SELECT COUNT(user_id) 
                               FROM Users) ,2) as percentage
FROM 
    Register
GROUP BY 
    contest_id
ORDER BY 
    percentage desc, contest_id ASC