복수행 함수

혜쿰·2023년 7월 25일
2
  • 복수행 함수(집계 함수) : 전체 자료를 그룹별로 구분하여 통계 결과를 얻음.

SELECT sum(jikwon_pay) AS 합, AVG(jikwon_pay) AS 평균 FROM jikwon;
SELECT sum(jikwon_pay) AS 합, AVG(jikwon_pay) AS 평균 FROM jikwon WHERE jikwon_gen = '남';
SELECT MAX(jikwon_pay) AS 최대연봉, MIN(jikwon_pay) AS 최소연봉,
STD(jikwon_pay) AS 표준편차, VAR_SAMP(jikwon_pay) AS 분산 FROM jikwon;
SELECT SUM(jikwon_pay), SUM(nvl(jikwon_pay,0)) FROM jikwon; -- 값 같음
SELECT AVG(jikwon_pay), AVG(nvl(jikwon_pay,0)) FROM jikwon; -- 값 서로 다름 5386.2069 / 5206.6667 -> 복수행함수는 널은 작업에서 제외됨
SELECT SUM(jikwon_pay) /29, SUM(jikwon_pay) / 30 FROM jikwon; -- 5386.2069 / 5206.6667
SELECT COUNT(jikwon_no) AS 건수, COUNT(), COUNT(jikwon_pay) FROM jikwon; -- count는 파라미터를 을 쓰는게 좋음
SELECT COUNT(*) FROM jikwon WHERE jikwon_gen = '여';

  • 연습 문제

-- 과장은 몇명일까?
SELECT COUNT() as 인원수 FROM jikwon WHERE jikwon_jik = '과장';
-- 2010년 이전에 입사한 남직원은 몇명?
SELECT COUNT(
) as 인원수 FROM jikwon WHERE jikwon_ibsail < '2010-1-1' AND jikwon_gen = '남';
-- 2015년 이후에 입사한 여직원의 연봉합, 평균, 인원수는?
SELECT SUM(jikwon_pay) AS 연봉합, AVG(jikwon_pay) AS 연봉평균 , COUNT(*) AS 인원수 FROM jikwon WHERE jikwon_ibsail >= '2015-1-1' AND jikwon_gen = '여';

  • 그룹 함수 - groub by 절 : 소개 출력
  • 형식) select 그룹칼럼명, 계산함수(),... from 테이블명 where 조건 group by 그룹칼럼명 having 출력결과조건
  • groub by 절에는 order by를 사용할 수 없다. 단, 출력결과에 대한 oreder by 는 가능하다.

SELECT FROM jikwon ORDER BY jikwon_gen;
-- 성별 연봉의 평균
SELECT AVG(jikwon_pay) FROM jikwon WHERE jikwon_pay = '남';
SELECT AVG(jikwon_pay) FROM jikwon WHERE jikwon_pay = '여'; -- 바람직하지 않음
SELECT jikwon_gen AS 성별 , AVG(jikwon_pay) AS 평균, COUNT(
)AS 인원수 FROM jikwon GROUP BY jikwon_gen; -- 앞 두문장 한꺼번에 처리 가능
-- 부서별 연봉합
SELECT buser_num, SUM(jikwon_pay) FROM jikwon GROUP BY buser_num;
-- 부서별 연봉합 : 연봉합이 35000이상만 출력
SELECT buser_num, SUM(jikwon_pay) FROM jikwon GROUP BY buser_num HAVING SUM(jikwon_pay) >= 35000;
SELECT buser_num, SUM(jikwon_pay) AS hap FROM jikwon GROUP BY buser_num HAVING SUM(hap) >= 35000; -- 별명으로 조건에 참여할 수도 있다.
-- 부서별 연봉합 : 여직원만 출력
SELECT buser_num, SUM(jikwon_pay) FROM jikwon WHERE jikwon_gen = '여' GROUP BY buser_num; -- having의 조건과 where의 조건 구별
-- 부서별 연봉합 : 연봉합이 150000 이상이 여직원만 출력
SELECT buser_num, SUM(jikwon_pay) FROM jikwon WHERE jikwon_gen = '여'
GROUP BY buser_num HAVING SUM(jikwon_pay) >= 150000;
-- 주석 : group by 전에 order by X
SELECT buser_num, SUM(jikwon_pay) FROM jikwon ORDER BY buser_num DESC GROUP BY buser_num; -- err
SELECT buser_num, SUM(jikwon_pay) AS hap FROM jikwon group by buser_num ORDER BY hap DESC;

0개의 댓글