Leet
-
[Leet 1934] Confirmation RateLeet 2025. 1. 31. 20:12
이것도 GROUP BY로 통계내기 직전 CASE WHEN으로 특정 조건에 맞는 행으로 통계내는 식이다 여기 문제들 왜 거의 다 이런 식이지..문제 풀이 방식이 왜 다 똑같냐..https://leetcode.com/problems/confirmation-rate/description/ SELECT s.user_id AS user_id, ROUND( SUM( CASE WHEN c.action = 'confirmed' THEN 1 ELSE 0 END ) / COUNT(*) ,2) AS confirmation_rateFROM Signups AS sLEFT JOIN Confirmatio..
-
[Leet 1193] Monthly Transactions 1Leet 2025. 1. 31. 19:56
DATE_FORMAT으로 날짜 형식 맞추기그리고 GROUP BY 후 집계함수 내 CASE - WHEN 이나 IF 절로 원하는 조건에 맞게 통계내기 이거 두 개가 핵심이다 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' T..
-
[Leet 585] Investments in 2016Leet 2025. 1. 31. 19:24
lat, lon 가 unique한 행들 중tiv_2015 값이 동일한 행들이 2개 이상있는 row들만 추출해서해당 row들의 tiv_2016의 합계를 구하는 문제이다. GROUP BY와 HAVING절 COUNT를 통해서 unique하고 unique하지 않은 행들을 추출해내는게 핵심이다 https://leetcode.com/problems/investments-in-2016/description/ SELECT ROUND(SUM(tiv_2016), 2) AS tiv_2016FROM InsuranceWHERE tiv_2015 IN ( SELECT tiv_2015 FROM Insurance GROUP BY tiv_2015 HAVING COUNT(*) > 1) AND (lat,lon) IN ..
-
[Leet 262] Trips and UsersLeet 2025. 1. 15. 19:53
이 문제의 핵심은 날짜별로 GROUP BY를 한 후해당 날짜별로 취소율을 계산해야한다는 것이다 GROUP BY를 하면 GROUP BY의 기준 칼럼만 명시 가능하고 그 외 칼럼들을 사용하지는 못한다. 사용해도 집계함수가 포함된 절을 활용해야한다. 예를 들어, SUM COUNT 같은 것들. 하지만 SUM 내에서 CASE 구문을 통해서 특정 칼럼을 활용할 수 있다는 것을 알았다. 아래에서는 집계함수인 SUM 내에서 CASE WHEN 절을 활용하여 취소된 개수를 구하고 COUNT(*)로 나눠 취소율을 구한다.' https://leetcode.com/problems/trips-and-users/description/ WITH temp AS ( SELECT users_id FROM Users WHE..
-
[Leet 185] Department Top Three SalariesLeet 2025. 1. 15. 19:52
랭킹을 알아서 계산해주는 함수가 있다는 것을 처음알았다.근데 이거 알면 진짜 알짜배기로 유용하게 잘 쓸 수 있을듯? DENSE_RANK를 통해 salary를 기준으로 랭킹을 매기고PARTITION을 통해 각 부서별로 랭킹을 매길 수 있게 한다 그 이후 각 부서별 상위 3개의 top salaries만 뽑아야하므로JOIN 후 WHERE 절에서 범위에 맞게 추출해주면 된다 CTE를 사용할때 바로 WHERE 절로 추출을 못한다고 한다.그 이유는 다음과 같다. salary_ranking은 DENSE_RANK() 윈도우 함수의 결과입니다.하지만 윈도우 함수는 SELECT 절에서 계산되기 때문에 WHERE 절에서 바로 필터링할 수 없습니다.즉, WHERE salary_ranking WITH temp AS ( ..