[SQL 코드카타]
1907. Count Salary Categories
https://leetcode.com/problems/count-salary-categories
1) 어떤 문제가 있었나
급여 구간을 나눠서 각 구간별 숫자를 구하는 것인데, 0인 구간 값 도출이 어려웠음
2) 내가 시도해본 건 무엇인가
accounts_count 부분에 *, ifnull 등을 시도해보았으나 0 값은 안 나옴
#오답 #Average Salary 0 값이 안 나옴
select case when income < 20000 then "Low Salary"
when income between 20000 and 50000 then "Average Salary"
when income > 50000 then "High Salary"
end category,
count(account_id) accounts_count
from Accounts
group by category
3) 어떻게 해결했나
다른 사람 풀이를 통해 3개 카테고리에 대해 union을 진행한 것을 확인 후 적용하여 정답 처리
select "Low Salary" category, count(*) accounts_count
from Accounts
where income < 20000
union
select "Average Salary" category, count(*) accounts_count
from Accounts
where income between 20000 and 50000
union
select "High Salary" category, count(*) accounts_count
from Accounts
where income > 50000;
4) 무엇을 새롭게 알았나
- PIVOT 함수 적용과 UPPIVOT 함수를 활용한 행/열 전환
[PIVOT]
SELECT *
FROM ( 피벗할 쿼리문 ) AS result
PIVOT ( 그룹합수(집계할 컬럼)* FOR 피벗대상컬럼(카테고리) IN ([피벗컬럼값] ... ) AS pivot_result
* SUM(), COUNT(), AVG() 등 사용 가능
[UNPIVOT]
SELECT *
FROM ( 대상테이블 or 서브쿼리 ) AS tab
UNPIVOT ( 집계값 칼럼명* FOR UNPIVOT대상칼럼명* IN ([UNPIVOT할칼럼명] ... ) AS unpvt
* 집계값 및 UNPIVOT 대상 칼럼명은 임의로 새 명칭을 부여
* 상기 문제 예시 (문제 풀이 페이지에서는 UNPIVOT 부분에 오류 발생해 추후 다른 데이터로 pivot 함수 TEST 필요)
with category_table as
(select sum(case when income < 20000 then 1 else 0 end) "Low Salary",
sum(case when income between 20000 and 50000 then 1 else 0 end) "Average Salary",
sum(case when income > 50000 then 1 else 0 end) "High Salary"
from Accounts)
select category, accounts_count
from category_table ct
UNPIVOT (accounts_count #집계값을 표시할 칼럼
for category #카테고리를 표시할 칼럼
in ([Low Salary], [Average Salary], [High Salary])) as Unpivoted
[파이썬 코드카타]
두 정수 사이의 합
https://school.programmers.co.kr/learn/courses/30/lessons/12912
1) 어떤 문제가 있었나
2) 내가 시도해본 건 무엇인가
3) 어떻게 해결했나
if 문으로 a와 b 크기에 따른 조건을 지정하고, for 문을 활용해 a와 b 사이의 합을 구함
def solution(a, b):
answer = 0
if b >= a:
for i in range(a, b+1):
answer = answer + i
elif b < a:
for j in range(b, a+1):
answer = answer + j
return answer
4) 무엇을 새롭게 알았나
for문을 이용하지 않고 간단히 푼 풀이들. for 문이 능사가 아니다..
#if문을 활용해 조건에 따라 함수 내 변수 순서를 변경
def solution(a, b):
if a > b:
a, b = b, a
return sum(range(a, b + 1))
#min, max 함수로 a, b값이 지정되도록 구성
def solution(a, b):
return sum(range(min(a, b), max(a, b)+1))
'TIL' 카테고리의 다른 글
[240124] SQL: 코드카타 113~114 & 파이썬: 코드카타 23 (0) | 2024.01.24 |
---|---|
[240119-23] 통계학 기초 (0) | 2024.01.23 |
[240122] SQL: 코드카타 110 & 파이썬: 코드카타 21 (0) | 2024.01.22 |
[240119] SQL: 코드카타 108~109 & 파이썬: 코드카타 19~20 (0) | 2024.01.19 |
[240118] SQL: 코드카타 106~107 & 파이썬: 코드카타 18 (0) | 2024.01.18 |