Accounts
+-------------+------+
| Column Name | Type |
+-------------+------+
| account_id | int |
| income | int |
+-------------+------+
account_id는 이 테이블의 기본 키(고유 값을 가진 열)입니다.
각 행에는 한 은행 계좌의 월 소득에 대한 정보가 들어 있습니다.
각 급여 범주에 대한 은행 계좌의 수를 계산하는 솔루션을 작성합니다. 급여 범주는 다음과 같습니다:
"Low Salary": 모든 급여가 $20000 미만입니다.
"Average Salary": 포함 범위[$20000, $50000]의 모든 급여입니다.
"High Salary": $50000보다 엄격하게 큰 모든 급여.
결과 테이블에는 세 가지 카테고리가 모두 포함되어야 합니다. 한 카테고리에 계정이 없는 경우 0을 반환합니다.
결과 테이블은 어떤 순서로든 반환합니다.
-- 무지성 UNION 사용 문제 풀이 SELECT 'Low Salary' AS category , COUNT(account_id) AS accounts_count FROM Accounts WHERE income < 20000 UNION SELECT 'Average Salary' AS category , COUNT(account_id) AS accounts_count FROM Accounts WHERE income BETWEEN 20000 AND 50000 UNION SELECT 'High Salary' AS category , COUNT(account_id) AS accounts_count FROM Accounts WHERE income > 50000 ; -- 가상 테이블 생성 방식 -- 오히려 가독성도 떨어지고, 성능 부분에서 큰 차이가 없음 -- 굳이 따지면 아래 쿼리가 조금 더 성능이 좋음(Accounts 1회 스캔) WITH TMP_TB1 AS ( SELECT account_id, CASE WHEN income < 20000 then 'Low Salary' WHEN income > 50000 then 'High Salary' ELSE 'Average Salary' END AS category FROM Accounts ), TMP_TB2 AS ( SELECT 'Low Salary' AS category UNION ALL SELECT 'Average Salary' UNION ALL SELECT 'High Salary' ) SELECT A.category , COUNT(B.account_id) AS accounts_count FROM TMP_TB2 A LEFT JOIN TMP_TB1 B ON A.category = B.category GROUP BY A.category ;
https://leetcode.com/problems/count-salary-categories/?envType=study-plan-v2&envId=top-sql-50