https://leetcode.com/problems/average-selling-price/description/
Average Selling Price
-- 제품별 평균 판매 가격, 소수점 둘째 자리까지 반올림
-- 단위가 없는 경우 0으로 처리
SELECT
p.product_id,
CASE WHEN SUM(u.units) IS NULL THEN 0
ELSE ROUND(SUM(p.price*u.units)/SUM(u.units),2)
END AS average_price
FROM
Prices p
LEFT JOIN UnitsSold u
ON u.product_id = p.product_id
AND u.purchase_date >= p.start_date
AND u.purchase_date <=p.end_date -- on에 조건 여러개 가능
GROUP BY 1 ;
💡 on에 조건 여러개 가능
https://leetcode.com/problems/percentage-of-users-attended-a-contest/description/
Percentage of Users Attended a Contest
-- 대회 등록한 사람 비율 소수점 둘째 자리까지
-- 비율 기준 내림차순, 대회 아이디 기준 오름차순
WITH a AS(
SELECT
r.contest_id,
u.user_id,
COUNT(*) cnt_contest
FROM
Register r LEFT JOIN Users u ON r.user_id = u.user_id
GROUP BY 1), -- 대회 등록한 사람수
b AS(
SELECT
count(*) AS cnt
FROM
Users) -- 전체 사람수
SELECT
a.contest_id,
ROUND(a.cnt_contest / b.cnt *100,2) AS percentage
FROM
b CROSS JOIN a -- 크로스 조인써서 전체 사람수를 모든 곳에 뿌림
ORDER BY 2 DESC , 1 ;
- 이 방법보다 더 간단한 방법이 있을 것 같은데 한 번 고민해봐야겠음
'SQL > 문제' 카테고리의 다른 글
| SQL | Game Play Analysis IV, Product Sales Analysis III (0) | 2025.01.07 |
|---|---|
| SQL | Monthly Transactions, Immediate Food Delivery II (0) | 2025.01.07 |
| SQL | Students and Examinations, Managers with at Least 5 Direct Reports (1) | 2025.01.06 |
| SQL | Customer Who Visited but Did Not Make Any Transactions, Rising Temperature (0) | 2025.01.05 |
| QCC 1회차 (0) | 2025.01.05 |