자신에게 친절할 것 :)

Data Science/MySQL

[HackerRank sql] 집계함수 내에도 필요하면 distinct 쓸 것.

Tashapark 2025. 1. 26. 19:41
728x90
반응형

New Companies

Note: -> 노트에 주의할 것. 

  • The tables may contain duplicate records. => 그게 아니라 중복이.. 문제였던 것
  • The company_code is string, so the sorting should not be numeric. For example, if the company_codes are C_1, C_2, and C_10, then the ascending company_codes will be C_1, C_10, and C_2.

- 왠지 서브쿼리로 빼야 할 거 같은데 .. 나의 한계이다.. 도저히 모르겠어.. ㅠ

- 난 그룹바이를 복잡하게 빼는 것을 어떻게 할 지를 모르겠어... 

- where절로 빼는 게 맞는 건가?

 

 

수정 전

select c.company_code, c.founder, count(lm.lead_manager_code), count(sm.senior_manager_code), count(m.manager_code), count(e.employee_code)
from company c
join lead_manager lm using(company_code)
join senior_manager sm using(lead_manager_code)
join manager m using(senior_manager_code)
join employee e using(manager_code)
group by c.company_code, c.founder
order by c.company_code;

- 왜.. 카운트가.. 쪼개지지 않고.. 다 합쳐서 들어갈까..

- 그룹바이 때문인 것 같긴 한데..

- 각 테이블에 각각의 칼럼들이 중첩되어 있다보니깐, join 시 값들이 중복되서 전부 같이 뜨게 된 거라고 했음. 

 

 

수정 후

select c.company_code, c.founder, 
count(distinct lm.lead_manager_code), -- distinct 를 붙여서 중복을 제거해야 하고 집계함수 내에도 가능
count(distinct sm.senior_manager_code), 
count(distinct m.manager_code), 
count(distinct e.employee_code)
from company c
join lead_manager lm using(company_code)
join senior_manager sm using(lead_manager_code)
join manager m using(senior_manager_code)
join employee e using(manager_code)
group by c.company_code, c.founder -- 하나로만 하지 말고, 해당 되는 거 전부 할 것. 
order by c.company_code;
728x90
반응형