Group By 최대값을 가진 Row를 추출하는 쿼리

2020. 5. 19. 17:02 Database/MS Sql

Group By 최대값을 가진 Row를 추출하는 쿼리

  • Group by를 이용하여 특정필드의 최대값을 가지고 올수 있지만 group by 특성상 해당하는 row의 다른 필드의 값을 가지고 올수가 없다.
  • 최대값이 있는 row 값을 가지고 오는 방법을 아래와 같이 2가지 방법이 있다.
  • DB, Index, Table 구조 등에 따라 속도가 달라지기때문에 그때 그때에 맞게 2가지 방법중에 사용하면 된다.

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를 찾아오는 쿼리

SELECT a.*
FROM YourTable a
LEFT JOIN YourTable b
ON a.id = b.id AND a.rev < b.rev
WHERE b.id IS NULL;
  • Group By 키워드를 사용하지 않고 최대값을 찾는 쿼리
  • Self Left Join을 통해 가지고 올수 있다.
  • `b.rev`가 NULL 이라면 `a.rev`가 최대값이기 때문에 최대값을 가진 row값을 추출을 할수가 있다.


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

'Database > MS Sql' 카테고리의 다른 글

[MSSQL] DECIMAL 사칙연산 파헤치기  (0) 2021.04.11
[MSSQL] Collation 충돌 해결하기  (0) 2021.04.11
[MSSQL] Collation 파헤치기  (0) 2021.04.11