SQL 문제풀이 복습
문제 링크
집계함수와 case when을 섞어서 쓰면
괜히 cte 여러 개 만들 거 없이 간단하게 해결할 수 있다.
1트(6/30) 때는 아무리 봐도 너무 쓸데없이 복잡했음ㅇㅇ
SELECT t.request_at AS "Day",
ROUND(COUNT(CASE
WHEN t.status LIKE 'cancelled%' THEN t.id
end) / COUNT(*), 2) AS "Cancellation Rate"
FROM Trips t
LEFT JOIN Users u
ON t.client_id = u.users_id
LEFT JOIN Users u2
ON t.driver_id = u2.users_id
WHERE u.banned <> 'Yes'
AND u2.banned <> 'Yes'
AND t.request_at BETWEEN '2013-10-01' AND '2013-10-03'
GROUP BY 1;
문제 링크
어차피 emp_id별로 최대 salary를 구하면 되므로
group by 1만 하면 된다.
왜 1트(8/11) 때는 group by 1,2,3라고 했을까..🤔
SELECT emp_id,
firstname,
lastname,
MAX(salary) AS "salary",
department_id
FROM Salary
GROUP BY 1
ORDER BY 1;
SELECT artist,
COUNT(*) AS "occurrences"
FROM Spotify
GROUP BY 1
ORDER BY 2 DESC,
1;