>데이터 베이스 >MySQL 튜토리얼 >MySQL의 GROUP BY 및 ORDER BY를 사용하여 각 발신자로부터 가장 최근 이메일을 검색하는 방법은 무엇입니까?

MySQL의 GROUP BY 및 ORDER BY를 사용하여 각 발신자로부터 가장 최근 이메일을 검색하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-12 13:57:46986검색

How to Retrieve the Most Recent Email from Each Sender Using MySQL's GROUP BY and ORDER BY?

MySQL의 GROUP BY, ORDER BY 절에 대한 자세한 설명과 적용

MySQL 데이터베이스의 데이터 테이블로 작업할 때는 GROUP BYORDER 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.