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
운영게시판
최근게시물
MS-SQL Q&A 5825 게시물 읽기
No. 5825
간단한 쿼리 질문입니다.
작성자
성승제
작성일
2011-01-18 16:07ⓒ
2011-01-18 16:08ⓜ
조회수
6,226

다음과 같은 테이블이 있습니다.

테이블1            테이블2               테이블3

TDAPay TDAEmpMaster TDADept

YM

EmpId(FK)

Pay

EmpNm (PK)

EmpNm

DeptCd (FK)

DeptCd (PK)

DeptNm

 

PK : 기본키

FK : 참조키

문제는 다음과 같습니다.

4월 가장 많은 금액을 받은 부서에서 가장 많은 급여를 받은 사원은?

결과 : 년월, 부서코드, 부서명, 사원ID, 사원명, 급여

 

제가 데이터베이스 초보여서 이렇게 글을 남깁니다.

4월 가장 많은 금액을 받는 부서는 뽑아낼 수 있고,

가장 많은 급여를 받는 사원은 따로따로는 뽑아 낼 수 있는데

가장 많은 금액을 받은 부서에서 가장 많은 급여를 받은 사원을 뽑으려면 어떻게 해야할지 감이 잡히질 않습니다.

아래는 부서별 2월 급여를 큰 순서대로 뽑아 본 것입니다.

이것이 기본 아이디어가 될 수 있을거 같은데.

고수님들의 도움 부탁드립니다.

DECLARE @wYM CHAR(8)

 

 

 

 
SET @wYM = '200702' -- '2' 정보를담은변수
 
SELECT B.DeptCd AS 부서코드,C.DeptNm AS 부서명,SUM(A.Pay) AS 급여
FROM TDAPay A , TDAEmpMaster B, TDADept C
 
WHERE B.DeptCd = C.DeptCd and A.YM = @wYM
 
GROUP BY B.DeptCD, C.DeptNm
 
ORDER BY SUM(A.Pay) DESC
이 글에 대한 댓글이 총 2건 있습니다.

with TDAPay as (
select '201004' ym, '0001' EmpId, 50000 Pay union all
select '201004' ym, '0002' EmpId, 70000 Pay union all
select '201004' ym, '0003' EmpId, 30000 Pay union all
select '201004' ym, '0004' EmpId, 40000 Pay union all
select '201004' ym, '0005' EmpId, 50000 Pay union all
select '201004' ym, '0006' EmpId, 90000 Pay union all
select '201004' ym, '0007' EmpId, 20000 Pay union all
select '201004' ym, '0008' EmpId, 60000 Pay union all
select '201004' ym, '0009' EmpId, 80000 Pay union all
select '201004' ym, '0010' EmpId, 10000 Pay
),   TDAEmpMaster as (
select '0001' EmpId, '01' DeptCd, 'Kang Min Su' EmpNm union all
select '0002' EmpId, '01' DeptCd, 'Kim Min Su' EmpNm union all
select '0003' EmpId, '02' DeptCd, 'Jang Min Su' EmpNm union all
select '0004' EmpId, '02' DeptCd, 'Park Min Su' EmpNm union all
select '0005' EmpId, '03' DeptCd, 'Bak Min Su' EmpNm union all
select '0006' EmpId, '03' DeptCd, 'Lee Min Su' EmpNm union all
select '0007' EmpId, '04' DeptCd, 'Yi Min Su' EmpNm union all
select '0008' EmpId, '04' DeptCd, 'Jung Min Su' EmpNm union all
select '0009' EmpId, '01' DeptCd, 'Choi Min Su' EmpNm union all
select '0010' EmpId, '02' DeptCd, 'Cho Min Su' EmpNm
),   TDADept  as (
select '01' DeptCd, 'Dept01' DeptNm union all
select '02' DeptCd, 'Dept02' DeptNm union all
select '03' DeptCd, 'Dept03' DeptNm union all
select '04' DeptCd, 'Dept04' DeptNm
)
select a.DeptCd
     , a.DeptNm
     , a.DeptPay
     , a.EmpId
     , a.EmpNm
     , a.Pay
  from (
         select a.DeptCd
              , a.DeptNm
              , a.DeptPay
              , a.EmpId
              , a.EmpNm
              , a.Pay
              , row_number()over(order by a.DeptPay desc, a.pay desc) rn
           from (
                  select b.DeptCd
                       , c.DeptNm
                       , a.EmpId
                       , b.EmpNm
                       , a.Pay
                       , sum(a.pay)over(partition by b.DeptCd) DeptPay
                    from TDAPay       a
                       , TDAEmpMaster b
                       , TDADept      c
                   where a.ym     = '201004'
                     and a.EmpId  = b.EmpId
                     and b.DeptCd = c.DeptCd
                ) a
       ) a
 where a.rn = 1

知音(sunnylee72)님이 2011-01-20 14:26에 작성한 댓글입니다.

윗분은 오라클 기준으로 하셨나보네요 ^^;

전 그냥 간단하게 MS-SQL버젼으로 바꿔봅니다..ㅎ

select top(1)
   b.DeptCd
       , c.DeptNm
       , a.EmpId
       , b.EmpNm
       , a.Pay
       , sum(a.Pay)over(partition by b.DeptCd) DeptPay
    from TDAPay       a
       , TDAEmpMaster b
       , TDADept      c
   where a.ym     = '201004'
     and a.EmpId  = b.EmpId
     and b.DeptCd = c.DeptCd
order by DeptPay desc, a.Pay desc

김한결님이 2011-03-31 18:57에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
5829update 쿼리 질문드립니다.. ㅠㅠ [1]
바보
2011-01-21
5927
5828월이 주어 졌을때 주간별 통계내기 질문입니다. [1]
한호
2011-01-19
8191
5827프로시져인데 당췌 왜 에러가 나는지 고수님들 부탁드려요
소울보더
2011-01-19
6796
5825간단한 쿼리 질문입니다. [2]
성승제
2011-01-18
6226
5823서버컴퓨터에서 C드라이브 용량문제입니다. [2]
정명규
2011-01-14
7061
5822컬럼값 중 중간값은 어떻게 가져오는지 고수님들의 도움 부탁 드립니다. [1]
박철우
2011-01-13
6602
5821한 테이블에서 count 가져오기 (자체 해결완료)
서유미
2011-01-13
6678
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다