자기 회사 평균보다 많이 받는 사원
문제
회사 안에서 급여가 평균보다 높은 사원을 보려고 한다. 견주는 평균은 회사 전체의 평균이 아니라 그 사원이 다니는 회사의 평균이다.
다니는 회사의 평균 급여보다 많이 받는 사원의 이름과 회사 번호, 급여를 사원 이름 오름차순으로 조회하여라.
평균과 똑같이 받는 사원은 고르지 않는다. 급여가 겹치는 소속은 없다.
사원 줄 하나를 보면서 "이 사원의 회사 평균" 을 알아야 하는데, 그 평균은 소속 표를 회사별로 묶어야 나온다. 줄 하나를 보는 것과 묶는 것을 한꺼번에 할 수는 없다. 회사별 평균을 먼저 표로 만들어 두고 그 표를 붙이는 쪽으로 생각해 보아라.
첫째 벌에서의 결과
첫째 벌의 자료에 대하여 나와야 하는 결과입니다. 나머지 열다섯 벌에서는 값과 줄의 수가 다릅니다.
| name | company_id | pay |
|---|---|---|
| 김영희 | 1 | 4500 |
| 박지은 | 4 | 5500 |
| 임꺽정 | 2 | 7000 |
| 홍길동 | 1 | 5000 |
입력 조건
이 문제의 자료에는 표가 셋 있습니다.
employee 는 사원입니다.
| 칸 | 형 | 뜻 |
| --- | --- | --- |
| employee_id | INTEGER | 사원 번호 |
| name | VARCHAR(30) | 이름. 한 벌 안에서 겹치지 않습니다 |
| age | INT | 나이 |
| gender | VARCHAR(30) | 성별 |
| address | VARCHAR(100) | 사는 시 |
company 는 회사입니다.
| 칸 | 형 | 뜻 |
| --- | --- | --- |
| company_id | INTEGER | 회사 번호 |
| name | VARCHAR(30) | 회사 이름. 한 벌 안에서 겹치지 않습니다 |
| category | VARCHAR(30) | 업종 |
| address | VARCHAR(100) | 회사가 있는 시 |
affiliation 은 어느 사원이 어느 회사에 얼마를 받고 다니는지입니다.
| 칸 | 형 | 뜻 |
| --- | --- | --- |
| affiliation_id | INTEGER | 소속 번호 |
| employee_id | INT | 사원 번호 |
| company_id | INT | 회사 번호 |
| pay | INT | 급여. 한 벌 안에서 겹치지 않습니다 |
| entry_date | DATE | 입사한 날 |
사원 한 명의 소속은 꼭 하나입니다. 한 사원이 두 회사에 다니는 일은 없고, 소속이 없는 사원도 없습니다. 모든 회사에는 사원이 한 명 이상 있습니다. 회사 이름 '천국테크' 와 'K디자인' 은 어느 벌에나 하나씩 있습니다.
이 문제는 employee 와 affiliation 을 봅니다. 회사 번호는 소속 표에 있으므로 company 표는 안 봐도 됩니다.
자료는 열여섯 벌이 있습니다. 표의 짜임과 칸은 열여섯 벌이 모두 같고, 들어 있는 값과 줄의 수가 벌마다 다릅니다. 낸 질의는 열여섯 벌 위에서 차례로 돌고, 열여섯 벌의 결과가 모두 맞아야 통과합니다.
첫째 벌의 자료는 문제 화면의 [자료] 칸에 있습니다. 나머지 열다섯 벌은 화면에 안 그려지지만, 질의가 당신 브라우저에서 도는 구조라 열여섯 벌이 모두 당신 기기로 내려갑니다. 보시려면 보실 수 있습니다. 숨겨 둔 척하지 않겠습니다.
그래서 한 벌이 아니라 열여섯 벌로 두었습니다. 한 벌이면 결과만 외워 적어도 통과합니다. 열여섯 벌이면 외워 적은 답이 그 벌에서만 맞습니다. 열여섯 벌의 답을 모두 손으로 적어 내는 길이 남아 있기는 한데, 낸 질의는 푼 사람 칸에 그대로 걸립니다. 막는 쪽보다 드러나는 쪽을 골랐습니다. 기대하는 결과의 지문은 서버만 가지고 있어서, 내보기 전에는 맞는지 확인할 수 없습니다.
출력 조건
자기 회사 평균보다 많이 받는 사원의 이름과 회사 번호, 급여를 사원 이름 오름차순으로 출력합니다.
칸은
name,company_id,pay세 개이고 이 차례입니다. 칸 이름이 자료의 칸 이름과 같으므로AS는 필요하지 않습니다.채점은 칸 이름과 값과 줄 순서를 모두 견줍니다. 칸 이름이 다르면 값이 맞아도 틀린 것으로 봅니다. 그래서 필요한 칸 이름을 위에 적어 두었고, 그 이름이 나오도록
AS를 쓰면 됩니다.
요구사항
- 사원의 급여가 그 사원이 다니는 회사의 평균 급여보다 큰 줄만 고릅니다. 같은 것은 뺍니다
- 칸은 name, company_id, pay 세 개입니다
- 사원 이름 오름차순으로 세웁니다
- 이 문제는 프롬프트가 아니라 질의(SQL)를 냅니다. 그 질의는 이 기기의 브라우저에 올라온 SQLite 에서 돌고, 서버로는 나온 결과표의 지문만 갑니다. 맞았는지는 서버가 정합니다.
- 견주는 것은 글이 아니라 결과표입니다. 칸 이름과 값과 줄 순서를 모두 봅니다. 칸 이름이 다르면 값이 맞아도 틀린 것으로 봅니다.
- 자료는 16벌입니다. 첫째 벌은 화면에 그려지고, 나머지도 질의가 당신 기기에서 돌기 때문에 모두 내려갑니다.
- 자료 16벌의 결과가 모두 맞아야 해결입니다.
참고 사항
풀이에 도움이 되는 배경입니다. 지켜야 하는 규격은 위의 입출력 조건과 요구사항에 있습니다.
FROM 안에 질의를 넣어 표로 쓸 수 있습니다.
FROM employee AS e, affiliation AS a, ( SELECT temp.company_id AS company_id, AVG(temp.pay) AS avg_pay FROM affiliation AS temp GROUP BY temp.company_id ) AS c
괄호 안의 질의가 회사별 평균 표를 만들고, 바깥에서는 그것을 보통 표처럼 씁니다. 회사 번호로 이어 붙이면 사원 줄마다 자기 회사의 평균이 붙습니다.
WHERE a.pay > AVG(a.pay) 처럼 적을 수는 없습니다. AVG 는 묶음 전체를 보는 것이고 WHERE 는 줄 하나를 보는 자리입니다.
SQLite 로 풀기
답이 가져야 하는 칸 name, company_id, pay
자료
첫째 벌입니다. 나머지 0벌은 짜임이 같고 값이 다릅니다.
자료를 받고 있습니다
질의
돌려보기는 첫째 벌에서만 돌리고 서버에 보내지 않습니다. 맞았는지는 제출하셔야 알 수 있습니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.