본문 바로가기
MySql

MySQL 그룹화 할 때 ORDER BY + MAX ()가 최대 값을 반환하는 이유는 무엇입니까?

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

이 부분이 쿼리에 있습니다.

GROUP BY trackid 
ORDER BY MAX(history.date) DESC

그리고 그룹화 할 때 각 그룹에 대한 최대 날짜가있는 행을 반환합니다. 왜 이런 행동입니까? 순서는 그룹화가 아닌 전체 행에서 작동해야합니다.?!?!?

수정 (예)

이것은 내 전체 쿼리입니다.

SELECT tracklist.value, history.date
FROM history JOIN tracklist ON history.trackid=tracklist.trackid 
ORDER BY history.date DESC

결과는 다음과 같습니다.

tracklist3  2011-04-27 15:40:36
tracklist2  2011-04-27 13:15:43
tracklist2  2011-04-02 00:30:02
tracklist2  2011-04-01 14:20:12
tracklist1  2011-03-02 14:13:58
tracklist1  2011-03-01 12:11:50

보시다시피 모든 라인은 history.date로 올바르게 정렬됩니다. Now I'd like to group them, keeping for each group the row with MAX history.date. 따라서 출력은 다음과 같아야합니다.

tracklist3  2011-04-27 15:40:36
tracklist2  2011-04-27 13:15:43
tracklist1  2011-03-02 14:13:58

내가 볼 :

GROUP BY trackid 
ORDER BY MAX(history.date) DESC

올바르게 작동하지만 작동 이유를 이해하지 못합니다. :) Order by는 그룹화가 아닌 전체 행에 대한 것입니다 ....

 

해결 방법

 

SELECT trackid, MAX (history.date) ... GROUP BY trackid ORDER BY MAX (history.date) DESC 라고 말하면 실제로 다음과 같이 말합니다. "각 트랙 목록에 대해 가장 최근 기록 항목 표시 가장 최근 기록 항목이 (전체) 가장 최근 인 트랙 목록을 먼저 보여주세요. "

ORDER BY 는 그룹화 에 적용됩니다 (이것이 SQL에서 GROUP BY 뒤에 오는 이유입니다).

예제에서는 SELECT tracklist.value, MAX (history.date) 대신 SELECT tracklist.value, history.date 가 있습니다. 이는 잘못된 것이며 불행히도 MySQL은 경고를 표시하지 않지만 재량에 따라 무작위 history.date 를 선택합니다.

 

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

 

 

반응형

댓글