Database/MySQL

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

BUST 2018. 9. 3. 22:38

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값을 추출을 할수가 있다.


'Database > MySQL' 카테고리의 다른 글

MySQL Partition Table  (0) 2018.11.05
MySQL Unique Key  (0) 2018.10.29
Mysql Query Plan  (0) 2018.07.24
Mysql Index HInts  (0) 2018.07.24
인덱스 설계에 필요한 선택도와 카디널리티  (0) 2018.06.11