오랜된 포스팅/SQL Developer

SQL Developer 기본문제 풀이(+GROUP BY / HAVING / AVG() ...)

Toycode 2018. 6. 22. 10:08

# 문제풀이에 사용된 함수

= GROUP BY / HAVING / AVG() / MAX() / MIN() / SUM() / DISTINCT / COUNT()


  1. --문제1) EMPLOYEES 테이블에서
  2. --모든 SALESMAN(SA_MAN)에 대하여
  3. --급여의 평균, 최고액, 최저액, 합계를 구하여 출력하여라.
  4. SELECT
  5.     AVG(SALARY) "급여의 평균",MAX(SALARY) "최고액",MIN(SALARY) "최저액",SUM(SALARY) "합계"
  6. FROM EMPLOYEES
  7. WHERE JOB_ID = 'SA_MAN'
  8. ORDER BY JOB_ID;

  9. --문제2) EMPLOYEES 테이블에 등록되어 있는인원수, 
  10. --보너스가 NULL이 아닌 인원수,보너스의 평균
  11. --등록되어 있는 부서의 수를 구하여 출력하라.(# 중요)
  12. SELECT COUNT(EMPLOYEE_ID) "등록된 사원 수" FROM EMPLOYEES;
  13. SELECT 
  14.     COUNT(COMMISSION_PCT) "보너스가 있는 사원수",FLOOR(AVG(SALARY*COMMISSION_PCT)) "보너스 평균"
  15. FROM EMPLOYEES WHERE COMMISSION_PCT IS NOT NULL;
  16. SELECT
  17.     COUNT(DISTINCT DEPARTMENT_ID)
  18. FROM EMPLOYEES
  19. WHERE DEPARTMENT_ID IS NOT NULL;

  20. --문제3) EMPLOYEES 테이블에서
  21. --부서별로 
  22. --인원수, 평균 급여, 최저급여, 최고 급여, 급여의 합을 구하여 출력하라.
  23. SELECT
  24.     COUNT(EMPLOYEE_ID) "인원수",FLOOR(AVG(SALARY)) "평균급여",MIN(SALARY) "최고급여",SUM(SALARY) "최저급여"
  25. FROM EMPLOYEES
  26. GROUP BY DEPARTMENT_ID;

  27. --문제4) EMPLOYEES 테이블에서
  28. --각 부서별로
  29. --인원수,급여의 평균, 최저 급여, 최고 급여, 급여의 합을 구하여 급여의 합이 많은 순으로 출력하여라.
  30. SELECT
  31.     COUNT(EMPLOYEE_ID) "인원수", FLOOR(AVG(SALARY)) "평균",MIN(SALARY) "최저",MAX(SALARY) "최고",SUM(SALARY) "합"
  32. FROM EMPLOYEES
  33. GROUP BY DEPARTMENT_ID
  34. ORDER BY "합" DESC;

  35. --문제5) EMPLOYEES 테이블에서
  36. --부서별, 업무별 그룹하여 결과를
  37. --부서번호, 업무, 인원수, 급여의 평균, 급여의 합을 구하여 출력하여라.
  38. SELECT
  39.     DEPARTMENT_ID "부서명", JOB_ID "업무", COUNT(EMPLOYEE_ID) "인원", FLOOR(AVG(SALARY)) "평균", SUM(SALARY) "합"
  40. FROM EMPLOYEES
  41. GROUP BY DEPARTMENT_ID,JOB_ID;

  42. --문제6) EMPLOYEES 테이블에서
  43. --부서 인원이 4명보다 많은 부서의
  44. --부서번호, 인원수, 급여의 합을 구하여 출력하여라.(GROUP BY, HAVING)
  45. SELECT
  46.     DEPARTMENT_ID "부서명", COUNT(EMPLOYEE_ID) "인원", SUM(SALARY) "월급 합"
  47. FROM EMPLOYEES
  48. GROUP BY DEPARTMENT_ID
  49. HAVING DEPARTMENT_ID > 4;

  50. --문제7) EMPLOYEES 테이블에서
  51. --급여가 최대 10000이상인 부서에 대해서
  52. --부서번호, 평균 급여, 급여의 합을 구하여 출력하여라.(#중요)
  53. SELECT
  54.     DEPARTMENT_ID "부서번호", FLOOR(AVG(SALARY)) "평균" , SUM(SALARY) "합"
  55. FROM EMPLOYEES
  56. GROUP BY DEPARTMENT_ID
  57. HAVING SUM(SALARY) > 10000;

  58. --문제8) EMPLOYEES 테이블에서
  59. --업무별 급여의 평균이 10000 이상인 업무에 대해서
  60. --업무명,평균 급여, 급여의 합을 구하여 출력하라.
  61. SELECT
  62.     JOB_ID, FLOOR(AVG(SALARY)), SUM(SALARY)
  63. FROM EMPLOYEES
  64. GROUP BY JOB_ID
  65. HAVING FLOOR(AVG(SALARY)) > 10000;

  66. --문제9) EMPLOYEES 테이블에서
  67. --전체 월급이 10000을 초과하는 각 업무에 대해서
  68. --업무와 월급여 합계를 출력하라. 
  69. --단 판매원은 제외하고 월 급여 합계로 정렬(내림차순)하라.(SA_)(#중요)
  70. SELECT
  71.     JOB_ID, SUM(SALARY)
  72. FROM EMPLOYEES
  73. GROUP BY JOB_ID
  74. HAVING SUM(SALARY) > 10000 AND JOB_ID NOT LIKE 'SA_%'
  75. ORDER BY SUM(SALARY) DESC;