개발/DB
[DB] group by 한 후 가장 큰 값의 데이터만 가져오기
당다라딩디리
2021. 12. 10. 14:12
반응형
(postgresql 를 사용하지만, 나중에 어느 database 로 변경될 지 모르기때문에.. 최대한 기본적인 쿼리를 사용해야함.)
아래와 같은 테이블에서 electorGroupId 별로 ccf_version 이 높은 데이터의 ccf 값을 뽑아와야한다. (x 가 아닌 데이터가 나와야함..)
처음에는 아래처럼 작성했는데.. group by 는 집계함수라 ccf 도 group by에 포함되어야 한다는 오류가 나왔다.. mysql 에서는 조회가 되긴 했는데..아무튼 틀린 쿼리다..
select max(ccf_version), elector_group_id, ccf from ra_ccf group by elector_group_id;
SQL Error [42803]: 오류: column "ra_ccf.ccf" 는 반드시 GROUP BY 절내에 있어야 하던지 또는 집계 함수 내에서 사용되어져야 한다
Position: 44
시행착오중..이 쿼리도 postgresql 에서는 성공한 쿼리인데.. 너무 복잡해서 더 찾아봤다..!
SELECT ccf
FROM (
SELECT elector_group_id, ccf_version, ccf,
ROW_NUMBER() OVER(PARTITION BY elector_group_id ORDER BY ccf_version DESC) as index
FROM v2xrav2.ra_ccf
) AS res
WHERE index = 1
아무튼 조회 성공한 쿼리는 아래와 같다!
select crl
from ra_crl
where (elector_group_id, crl_version)
in (
select elector_group_id, max(crl_version) as crl_version
from ra_crl
group by elector_group_id
)
반응형