database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41206 게시물 읽기
No. 41206
인상률 구하는 쿼리 질문드립니다.
작성자
건곤대나이
작성일
2016-08-02 17:28ⓒ
2016-08-02 17:29ⓜ
조회수
7,262
사원 년도 연봉 인상률 평균인상률
A 2016 120 0.0% 8.3%
2015 120 16.7%
2014 100 0.0%
B 2016 105 0.0% 0.0%
C 2016 145 20.7% 20.7%
2015 115 0.0%

 

위와 같은 데이터가 있습니다.

최종적으로 3년 평균인상률을 구해야 하는데

문제는 사원의 연봉데이터가 2014 , 2015 , 2016 순차적인 게 아니라 2016년에 입사한 사람은

2016년 밖에 없고 2015년은 2015,2016두개 밖에 없어 쿼리가 까다롭네요

한방쿼리로 짤수 있는 방법이 없을

 

이 글에 대한 댓글이 총 4건 있습니다.

100 에서 120 으로 인상되면
  - 인상율으 20%죠. 16.7%는 아닌 듯.
2014년도 근무하다가 2015년도 휴직하고 2016년도 복직한 경우
인상율은 2년치로 해서 평균 내나요? 단건으로 한번만 처리하나요?
  - 2014 100 => 2016 120 의 경우
  - 인상율은? 10%? 20%?

마농(manon94)님이 2016-08-03 10:25에 작성한 댓글입니다.

 ㅎㅎ 20% 맞습니다.

말씀하신 2014근무 후 2015휴직 2016복직이면 단건으로 처리해야 할 것 같습니다.

즉 20%죠

건곤대나이님이 2016-08-03 11:10에 작성한 댓글입니다. Edit

WITH t AS
(
SELECT 'A' id, '2016' yy, 120 sal FROM dual
UNION ALL SELECT 'A', '2015', 120 FROM dual
UNION ALL SELECT 'A', '2014', 100 FROM dual
UNION ALL SELECT 'B', '2016', 105 FROM dual
UNION ALL SELECT 'C', '2016', 145 FROM dual
UNION ALL SELECT 'C', '2015', 115 FROM dual
UNION ALL SELECT 'D', '2016', 100 FROM dual
UNION ALL SELECT 'D', '2014', 115 FROM dual
)
SELECT id
     , NVL(ROUND((e_sal - s_sal) / s_sal / cnt * 100, 2), 0) rat_avg
  FROM (SELECT id
             , MIN(sal) KEEP(DENSE_RANK FIRST ORDER BY yy) s_sal  -- 최초연봉
             , MIN(sal) KEEP(DENSE_RANK LAST  ORDER BY yy) e_sal  -- 최종연봉
             , NULLIF(COUNT(*) - 1, 0) cnt  -- 인상횟수
          FROM t
         WHERE yy BETWEEN '2014' AND '2016'
         GROUP BY id
        )
;

마농(manon94)님이 2016-08-03 11:41에 작성한 댓글입니다.

감사합니다.

저는 LAG LEAD 이 함후로 어찌해볼려고 했는데

더 깔끔한 방법이 있었네요.

쿼리관련 교재 혹시 추천해주실만한 거 있으신가요? 

건곤대나이님이 2016-08-03 13:29에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41209오라클 디비 백업 관련 문의
이성근
2016-08-06
6761
41208proc에서 다이나믹 쿼리 실행시...
박봉균
2016-08-04
6861
41207조건검색 sql 문 질문 [1]
최진안
2016-08-04
6835
41206인상률 구하는 쿼리 질문드립니다. [4]
건곤대나이
2016-08-02
7262
41205row를 합칠수 있을까요? [3]
하늘
2016-08-01
6920
41204프로시져 에서 인자값으로 조회조건 변경 [1]
초보
2016-07-28
6842
41203create diretory 관련 문의
정재영
2016-07-28
7086
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다