본문 바로가기
MySql

MySQL 하위 쿼리없이 MySQL의 GROUP BY보다 ORDER BY에 우선 순위 부여

by 베이스 공부 2020. 10. 21.
반응형

원하는 작업을 수행하는 다음 쿼리가 있지만 하위 쿼리없이이 작업을 수행 할 수 있다고 생각합니다.

  SELECT * 
    FROM (SELECT * 
            FROM 'versions' 
        ORDER BY 'ID' DESC) AS X 
GROUP BY 'program'

내가 필요한 것은 프로그램별로 그룹화하는 것이지만 "ID"값이 가장 높은 버전의 개체에 대한 결과를 반환하는 것입니다.

과거 경험에서 이와 같은 쿼리는 MySQL에서 작동해야 하지만 어떤 이유로 든 그렇지 않습니다.

  SELECT * 
    FROM 'versions' 
GROUP BY 'program' 
ORDER BY MAX('ID') DESC

내가 하는 것은 MySQL이 먼저 ORDER BY를 수행하고 그런 다음 GROUP BY를 수행하도록하는 것이지만, 먼저 GROUP BY를 수행 한 다음 ORDER BY를 수행하도록 고집합니다. 즉, 정렬 결과를 그룹화하는 대신 그룹화 결과를 정렬합니다.

물론 쓸 수 없습니다

SELECT * FROM 'versions'ORDER BY 'ID'DESC GROUP BY '프로그램'

감사.

 

해결 방법

 

이것은 그것을 수행하고 (program, id)에 복합 색인이있는 한 꽤 잘 작동합니다. 하위 쿼리는 각 프로그램 분기의 첫 번째 ID 만 검사하고 외부 쿼리에서 필요한 레코드를 빠르게 검색해야합니다.

select v.*
from
(
    select program, MAX(id) id
    from versions
    group by program
) m
inner join versions v on m.program=v.program and m.id=v.id

 

참조 페이지 https://stackoverflow.com/questions/4716369

 

 

반응형

댓글