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 |