[Fail Log] 나의 카카오 도전기(3) - 문제 해결 방법 - [문제 3] 풀이
문제 해결 방법 - [문제 3] 풀이
- [문제 3] 년도 별, 관리점 별 거래금액 합계 추출 : 출력 순서 [합계금액 desc]
해당 문제에 경우 데이터의 출력형이 json배열 안에 json배열이 있는 경우라서 쿼리를 두번 타게 설정했습니다.
가장 먼저 거래내역에서 기록이 있는 연도를 추출합니다. 1번 문제와 마찬가지로 2018년과 2019년의 거래정보밖에 없어서 하드코딩으로 두 개로 한정지어 조회 할 수도 있었으나 앞으로 계속 거래내역이 있을 수 있으므로 DB에서 따로 년도를 조회하는 로직을 추가 했습니다.
select
distinct year(tr_date) as year
from
tbl_transaction
order by
year asc
그 결과를 List
select
b.br_name as brName,
b.br_code as brCode,
sum(c.sum_amt) as sumAmt
from
tbl_account a,
tbl_branch b,
(
select
acct_no,
sum(tr_amount) as sum_amt
from
tbl_transaction
where year(tr_date) = #{value}
and can_yn = 'N'
group by
acct_no
) c
where a.acct_no = c.acct_no
and a.br_code = b.br_code
group by
a.br_code
order by
sum(c.sum_amt) desc
이렇게 조회된 데이터를 List
@Service
@Transactional
public class KakaoServiceImpl implements KakaoService {
/** ...중략... **/
@Override
public List<HashMap<String, Object>> selectRankSumAmtByBrEachYear() throws Exception {
List<HashMap<String, Object>> result = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> dataEachYear;
List<HashMap<String, Object>> dataList;
//각 거래 연도 그룹 조회
List<String> eachYear = mapper.selectTransGroupYear();
for(String year:eachYear) {
//초기화
dataEachYear = new HashMap<String, Object>();
dataList = new ArrayList<HashMap<String,Object>>();
//데이터 조회
dataList = mapper.selectRankSumAmtByBrEachYear(year);
//데이터 구성
dataEachYear.put("year", year);
dataEachYear.put("dataList", dataList);
result.add(dataEachYear);
}
return result;
}
/** ...후략... **/
}
Comments