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
운영게시판
최근게시물
MySQL Q&A 31016 게시물 읽기
No. 31016
DB에서 각 ID(키) 별 최신 연도의 특정 값들을 합하는 쿼리를 만들고 싶습니다.
작성자
오모씨
작성일
2017-01-05 11:36
조회수
6,027

 

안녕하세요.

 

특정 테이블에서 과거의 데이터는 제외하고 최신연도의 데이터의 개수를 구하고 싶습니다. DBMS는 MySQL을 사용하였습니다.

 

예를 들어

 

cYear, wId, wSalary

2015, 1111, 250

2014, 1111, 270

2015, 2222, 350

2014, 3333, 400

2013, 3333, 230

2013, 4444, 350

 

위와 같이 데이터가 있는 경우, wId 1111인 사람의 경우는 2014년, wId가 3333인 사람의 2013년 wSalary는 제외하고 나머지 세개의 wSalary 값을 합하는 쿼리를 만들고 싶습니다.

 

즉 wId가 1111인 사람은 cYear가 2015인 튜플의 wSalary인 250, wId가 2222인 사람은 cYear가 2015인 튜플의 wSalary인 350, wId 3333은 cYear가 2014연도 튜플의 wSalary인 400, wId 444는 cYear가 2013인 튜플의 wSalary인 350 들만 select해서 이들을 합하고 싶습니다.

 

따라서 결과는 1350 (250+350+400+350)이 나와야 합니다.

 

쿼리를 짤때 wId로 group by를 하고, 그 들 중 cYear가 MAX 것들만 select하여 이들의 합을 구하면 될 것 같아 아래와 같이 쿼리를 짜봤는데, 희한하게 최신연도가 아닌 wSalary 값도 같이 들어갑니다.

 

SELECT SUM(wSalary) FROM table WHERE cYear in (SELECT MAX(cYear) FROM table GROUP BY wId)

 

대체 뭐가 잘못되었는지를 모르겠습니다.

 

쿼리 고수님들 답변 부탁드립니다.

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

안녕하세요. mysql은 잘모르지만 도움이 되실까하여 글 남깁니다.

SELECT SUM(wSalary) FROM table WHERE cYear in (SELECT MAX(cYear) FROM table GROUP BY wId)

위 쿼리의 MAX(cYear) 값은 2013, 2014, 2015를 가져오게 되고, 이 세개 값은 모든 튜플에 존재하므로 6개의 wSalary 합계를 구하게됩니다.

따라서 wID와 cYear별로 묶어서 보신다면 아래와 같이 두 필드의 값을 동시에 비교하는 방법이 있습니다.

select sum(a.wsalary)
from tab1 a,
(select wid,max(cyear) yr from tab1 group by wid) b
where a.wid = b.wid
and a.cyear = b.yr
정상규(pajama)님이 2017-01-05 13:52에 작성한 댓글입니다.
이 댓글은 2017-01-05 13:54에 마지막으로 수정되었습니다.

잘 됩니다. 정말 감사드립니다!!!! 

오모씨님이 2017-01-09 17:34에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
31020나이대 구하기 [2]
궁그미
2017-01-20
6523
31018대용량 테이블에서 count 하기 [2]
오도훈
2017-01-06
6940
31017FULLTEXT 검색 관련 문의 드립니다.
임재송
2017-01-06
6030
31016DB에서 각 ID(키) 별 최신 연도의 특정 값들을 합하는 쿼리를 만들고 싶습니다. [2]
오모씨
2017-01-05
6027
31013c로 mysql 연동하고있는데 문제 해결이안되서 글올립니다. [1]
임윤택
2016-12-09
7520
31012mariaDB start slave가 안되는데요
초보
2016-12-06
6620
31011mysql 쿼리 질문드립니다. [1]
허스키
2016-12-02
6573
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다