95번. queries-quality-and-percentage
SELECT
Q.query_name,
ROUND(SUM(rating / position)/COUNT(Q.query_name),2) AS quality,
ROUND(A.cnt/COUNT(Q.query_name)*100,2) AS poor_query_percentage
FROM
Queries Q
JOIN (select query_name, count(1) AS cnt
from Queries
where rating < 3
Group by query_name) A
ON Q.query_name = A.query_name
GROUP BY Q.query_name
> poor_query_percentage를 어떻게 할지 고민하다가 결국 join을 썼는데, 한 수 배웠다. AVG와 SUM
SELECT
query_name,
ROUND(AVG(rating / position), 2) as quality,
ROUND(SUM(CASE WHEN rating < 3 THEN 1
ELSE 0 END) * 100 / count(*), 2) AS poor_query_percentage
FROM
Queries
GROUP BY
query_name
SELECT
DATE_FORMAT(trans_date, '%Y-%m') AS month,
country,
COUNT(*) AS trans_count,
SUM(CASE WHEN state = 'approved' THEN 1
ELSE 0 END) AS approved_count,
SUM(amount) AS trans_total_amount,
SUM(CASE WHEN state = 'approved' THEN amount
ELSE 0 END) AS approved_total_amount
FROM
Transactions
GROUP BY
DATE_FORMAT(trans_date, '%Y-%m'), country
97번. immediate-food-delivery-ii
SELECT
ROUND(SUM(CASE WHEN order_date = customer_pref_delivery_date THEN 1
ELSE 0 END)*100/COUNT(*),2) AS immediate_percentage
-- 다른 방법
-- round(avg(order_date = customer_pref_delivery_date)*100, 2) as immediate_percentage
FROM
Delivery
WHERE
(customer_id, order_date) IN (
SELECT customer_id, MIN(order_date) AS first_order_date
FROM Delivery
GROUP BY customer_id
)
'[스파르타코딩클럽]데이터분석 과정 > SQL' 카테고리의 다른 글
[SQL 코드카타] 165 ~ 168번 (HackerRank) (0) | 2024.01.10 |
---|---|
[SQL 코드카타] 158 ~ 164번 (HackerRank) (0) | 2024.01.09 |
[SQL] CTE와 VIEW _ 가독성과 번거로움을 덜기 위한 방법 (0) | 2024.01.05 |
[SQL 코드카타] 150 ~ 157번 (HackerRank) (0) | 2024.01.05 |
[SQL 코드카타] 92~94번 (LeetCode) (0) | 2024.01.04 |