Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- HackerRank
- SKU Consolidation
- forecast
- tensorflow
- SQL
- oracle
- 코딩테스트연습
- ProfileReport
- 딥러닝
- leetcode
- Gaimification
- 데이터분석
- 피그마인디언
- MySQL
- 당신의 인생이 왜 힘들지 않아야 한다고 생각하십니까
- kaggle
- pandas profiling
- Product Demand
- 파이썬
- 웨어하우스 보관 최적화
- ABC Analysis
- TensorFlowGPU
- 신경쓰기의 기술
- MS SQL Server
- ModelCheckPoint
- 코딩테스트
- 프로그래머스
- Labor Management System
- Inventory Optimization
- eda
Archives
- Today
- Total
오늘도 배운다
1907. Count Salary Categories / LeetCode, SQL, MS SQL Server 본문
코딩테스트연습(SQL)
1907. Count Salary Categories / LeetCode, SQL, MS SQL Server
LearnerToRunner 2023. 4. 18. 08:40문제
source: LeetCode
Write an SQL query to report the number of bank accounts of each salary category. The salary categories are:
"Low Salary": All the salaries strictly less than $20000."Average Salary":
All the salaries in the inclusive range [$20000, $50000]."High Salary":
All the salaries strictly greater than $50000.
The result table must contain all three categories. If there are no accounts in a category, then report 0.
Return the result table in any order.
제출답안(MS SQL Server)
WITH
ls_cat
AS (SELECT category
FROM (VALUES ('Low Salary'), ('Average Salary'), ('High Salary')) AS categories(category)),
acc_cat
AS (SELECT
account_id,
income,
CASE
WHEN income BETWEEN 20000 AND 50000 THEN 'Average Salary'
WHEN income > 50000 THEN 'High Salary'
ELSE 'Low Salary' END AS category
FROM
accounts)
SELECT
cat.category,
ISNULL(grp.accounts_count, 0) AS accounts_count
FROM
ls_cat AS cat
LEFT JOIN (SELECT category, COUNT(account_id) AS accounts_count
FROM acc_cat
GROUP BY category) AS grp
ON cat.category = grp.category
풀이(MS SQL Server)
더보기
CTE 1: 카테고리의 이름을 담은 칼럼 생성
WITH
ls_cat
AS (SELECT category
FROM (VALUES ('Low Salary'), ('Average Salary'), ('High Salary')) AS categories(category)),
>> VALUES를 이용하여 가상의 테이블을 만들어냄
>> 가상의 테이블에 카테고리를 담을 칼럼의 Alias를 괄호 안에 입력해줌
CTE2: 계좌별 카테고리 입력
acc_cat
AS (SELECT
account_id,
income,
CASE
WHEN income BETWEEN 20000 AND 50000 THEN 'Average Salary'
WHEN income > 50000 THEN 'High Salary'
ELSE 'Low Salary' END AS category
FROM
accounts)
메인쿼리
SELECT
cat.category,
ISNULL(grp.accounts_count, 0) AS accounts_count
FROM
ls_cat AS cat
LEFT JOIN (SELECT category, COUNT(account_id) AS accounts_count
FROM acc_cat
GROUP BY category) AS grp
ON cat.category = grp.category
>> 카테고리가 모두 보여야하기 때문에 ls_cat (CTE1)을 기준으로 조인
>> accounts 테이블에 특정 카테고리 값이 없을 경우 NULL이 되므로 ISNULL을 이용하여 NULL 발생 시 0 으로 전환
>> acc_cat (CTE2)를 카테고리별로 그룹화한 뒤 ls_cat(CTE1)과 조
문제 바로가기(MS SQL Server)
728x90
'코딩테스트연습(SQL)' 카테고리의 다른 글
1341. Movie Rating / LeetCode, SQL, MS SQL Server (0) | 2023.04.19 |
---|---|
1934. Confirmation Rate / LeetCode, SQL, MS SQL Server (0) | 2023.04.17 |
1321. Restaurant Growth / LeetCode, SQL, MS SQL Server (0) | 2023.04.16 |
1204. Last Person to Fit in the Bus / LeetCode, SQL, MS SQL Server (0) | 2023.04.15 |
550. Game Play Analysis IV / LeetCode, SQL, MS SQL Server (0) | 2023.04.14 |
Comments