집 >데이터 베이스 >MySQL 튜토리얼 >MySQL의 GROUP BY 및 ORDER BY를 사용하여 각 발신자로부터 가장 최근 이메일을 검색하는 방법은 무엇입니까?
MySQL의 GROUP BY
, ORDER BY
절에 대한 자세한 설명과 적용
MySQL 데이터베이스의 데이터 테이블로 작업할 때는 GROUP BY
및 ORDER BY
절의 상호 작용을 이해하는 것이 중요합니다. 다음 시나리오를 고려해보세요.
각 발신자로부터 최신 이메일을 검색할 목적으로 발신자의 이메일 주소별로 이메일 표의 행을 그룹화해야 합니다. 그러나 다음 쿼리는:
<code class="language-sql">SELECT `timestamp`, `fromEmail`, `subject` FROM `incomingEmails` GROUP BY LOWER(`fromEmail`) ORDER BY `timestamp` DESC</code>
은 잘못된 결과를 생성합니다. 보낸 사람별로 이메일을 그룹화하지만 각 그룹의 최신 주제를 표시하지 않을 수 있습니다. 결과는 다음과 같습니다:
<code>fromEmail: [email protected], subject: hello fromEmail: [email protected], subject: welcome</code>
실제 데이터에는 다음이 포함됩니다.
<code>fromEmail: [email protected], subject: hello fromEmail: [email protected], subject: programming question fromEmail: [email protected], subject: welcome</code>
해결책: 하위 쿼리 및 ANY_VALUE() 함수 사용
이 문제를 해결하려면 ANY_VALUE()
함수와 함께 하위 쿼리를 사용할 수 있습니다.
<code class="language-sql">SELECT * FROM ( SELECT `timestamp`, `fromEmail`, ANY_VALUE(`subject`) AS `subject` FROM `incomingEmails` ORDER BY `timestamp` DESC ) AS tmp_table GROUP BY LOWER(`fromEmail`)</code>
MySQL 5.7 이상에서 ANY_VALUE()
을 사용하면 GROUP BY
절이 있는 SELECT
문에서 집계되지 않은 열을 사용할 수 있습니다. 각 그룹에서 값을 무작위로 선택하여 하위 쿼리가 각 보낸 사람의 이메일 주소에 대한 가장 최근 제목을 검색하도록 합니다.
위 내용은 MySQL의 GROUP BY 및 ORDER BY를 사용하여 각 발신자로부터 가장 최근 이메일을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!