OVERCODE

최대값을 가진 Row 들을 추출하는 SQL 쿼리 2가지 (Group By MAX) 본문

프로그래밍/SQL

최대값을 가진 Row 들을 추출하는 SQL 쿼리 2가지 (Group By MAX)

오버코드 2021. 10. 21. 09:52

MSSQL, Oracle, MySQL... 공용

 

최대값이 있는 Row 들을 가지고 오는 방법은 아래와 같이 2가지 방법이 있다.
DB, Index, Table 구조 등에 따라 속도가 달라지기 때문에 때에 맞게 2가지 방법중에 사용하면 된다.

1. Group By 와 MAX 를 이용한 쿼리

SELECT a.id, a.rev, a.contents
FROM YourTable a
INNER JOIN (
    SELECT id, MAX(rev) rev
    FROM YourTable
    GROUP BY id
) b ON a.id = b.id AND a.rev = b.rev

Group BY와 SubQuery를 활용하여 먼저 id와 max값을 가지고 온뒤 INNER JOIN을 이용하여 해당하는 ROW를 찾아오는 쿼리이다.

group by 특성상 해당하는 row의 다른 필드의 값을 가지고 올수가 없다.

 

 

2. Self Left Join 을 이용한 쿼리

SELECT a.id, a.rev, a.contents
FROM YourTable a
INNER JOIN (
    SELECT id, MAX(rev) rev
    FROM YourTable
    GROUP BY id
) b ON a.id = b.id AND a.rev = b.rev

Group By 키워드를 사용하지 않고 Self Left Join을 통해 최대값을 찾는 쿼리이다.
`b.rev`가 NULL 이라면 `a.rev`가 최대값이기 때문에 최대값을 가진 row값을 추출을 할수가 있다.

 

원문출처 : https://helloino.tistory.com/120

 


Comments