[SQL Runday] HackerRank - New Companies
Advanced Select
- 회사 위계 구조
Founder(설립자) > Lead Manager > Senior Manager(선임 관리자) > Manager(관리자) > Employee(직원)- [Company_code, founder name, lead manager 총 인원 수, senior manager 총 인원 수, manager 총 인원 수, employee 총 인원수] 를 출력하는 쿼리를 작성해라.
- company_code 기준으로 오름차순 정렬해라.
유의할 점)
1. 중복 레코드를 포함하고 있음.
2. company_code는 문자열이므로, 숫자순으로 정렬해서는 안됨. 예를 들어 C_1, C_2, C_10 이렇게 있다면 C_1, C_10, C_2 이렇게 정렬해야 한다.
Key Points
- 여러 테이블들을 company_code라는 동일한 외래키를 사용하여
LEFT JOIN
을 통해 조회 해야 함- 헷갈렸던 부분 : 처음엔 Inner Join을 통해서 조회했는데, left join이어야 맞음. SM 테이블에 값이 없더라도 C 테이블 중심으로 조회되어야 함.
- 데이터를 Join할 때, 왼쪽 테이블에 있는 데이터가 오른쪽 테이블에 없을때 어떤 결과가 조회되어야 하는지 생각하면서 LEFT JOIN인지, INNER JOIN인지 판단해야 한다.
- 이 경우 Company 테이블에 C_999란 코드 값이 있는데 LM 테이블엔 없더라도, C_999란 값이 조회되어야 하므로 LEFT JOIN이 맞다.
COUNT(DISTINT )
에 대한 사용- distinct를 어떻게 써야 되나 고민하다가 그냥 COUNT(DISTINCT 원하는 칼럼)하면 해당 칼럼을 중복 없이 세기 때문에, 그 그룹의 갯수가 자연스럽게 구해지는 걸 괜히 어렵게 생각함.
Errors
- select c.company_code, c.founder 부분에서 group by에 c.company_code만 써줄 경우 자꾸 다음 에러가 발생함.
ERROR 1055 (42000) at line 1: Expression #2 of SELECT list is not
in GROUP BY clause and contains nonaggregated column
'run_ndb7mrwglbl.c.founder' which is not functionally dependent
on columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by
- c.founder는 GROUP BY절과 기능적으로 독립적이지 않기 때문에!
- select 할 부분을 group by에 동시에 써줘야 함.
- 왜냐면 조회할 때 해당 칼럼도 같이 가져오려면, 그 칼럼 기준으로도 그룹바이를 해줘야 하기 때문에.. 음.. 그렇다.
select c.company_code, c.founder,
count(distinct lm.lead_manager_code),
count(distinct sm.senior_manager_code),
count(distinct mg.manager_code),
count(distinct e.employee_code)
from Company c
left join Lead_Manager lm on c.company_code = lm.company_code
left join Senior_Manager sm on lm.company_code = sm.company_code
left join Manager mg on sm.company_code = mg.company_code
left join Employee e on mg.company_code = e.company_code
group by c.company_code, c.founder
order by c.company_code
오늘의 교훈. 너무 어렵게 꼬와서 생각하지 말고, 쉽게 생각하자!
그리고 해커랭크 서버.. sql 서버 특히나 너무 느리다.
난 계속 조회해가면서 결과 확인하면서 하는걸 좋아하는데..
이거 DB만 그대로 가져와서 DBeaver에서 하고 싶음 ㅜㅜ
Author And Source
이 문제에 관하여([SQL Runday] HackerRank - New Companies), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@honeybeat1/SQL-Runday-HackerRank-New-Companies저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)