본문 바로가기

개발/DB

[DB] group by 한 후 가장 큰 값의 데이터만 가져오기

반응형

(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
       )

 

반응형