SQL은 열에 최대값이 있는 행만 선택합니다.
P粉937382230
2023-08-23 11:08:57
<p>다음 문서 양식이 있습니다(간단한 버전은 다음과 같습니다). </p>
<테이블 클래스="s-테이블">
<머리>
<tr>
<번째> ID
<번째> 환승
<번째> 콘텐츠
</tr>
</머리>
<본문>
<tr>
<td>1</td>
<td>1</td>
<td>...</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>...</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>...</td>
</tr>
<tr>
<td>1</td>
<td>3</td>
<td>...</td>
</tr>
</tbody>
</테이블>
<p>ID당 하나의 행을 선택하고 가장 큰 RPM만 선택하는 방법은 무엇입니까? </p><p>
위 데이터를 사용하면 결과에는 <code>[1, 3, ...]</code> 및 <code>[2, 1, ..]</code> . 저는<em><strong>MySQL</strong></em>을 사용하고 있습니다. </p>
<p>현재 저는 <code>while</code> 루프에서 검사를 사용하여 결과 집합에서 이전 버전을 감지하고 덮어쓰고 있습니다. 하지만 이것이 이 결과를 얻을 수 있는 유일한 방법일까요? <strong>SQL</strong> 솔루션이 없나요? </p>
저는 가능한 한 적은 코드를 사용하는 것을 선호합니다...
이 작업은
으아아아IN
를 사용하여 수행할 수 있습니다. 이것을 시도해 보세요:제 생각에는 덜 복잡하고... 읽고 유지하기가 더 쉽습니다.
첫눈에...
필요한 것은
이 포함된 절뿐입니다. 으아악MAX
聚合函数的GROUP BY
:일이 그렇게 간단할 수가 없잖아요?
열
content
개도 필요하다는 사실을 방금 확인했습니다.이것은 SQL에서 매우 일반적인 문제입니다. 각 그룹 식별자 열에 최대값이 있는 행의 모든 데이터를 찾습니다. 저는 직장 생활을 하면서 이런 말을 자주 듣습니다. 사실 이것은 제가 현 직장에서 기술면접을 할 때 대답한 질문 중 하나였습니다.
실제로 Stack Overflow 커뮤니티에서는 다음과 같은 질문을 처리하기 위해 greatest-n-per-group이라는 태그를 만들었습니다.
기본적으로 이 문제를 해결하는 방법에는 두 가지가 있습니다.
간단한
group-identifier, max-value-in-group
하위 쿼리 조인 사용이 접근 방식에서는 먼저 하위 쿼리에서
및group-identifier, max-value-in-group
(上面已解决)。然后,将表连接到子查询,并在group-identifier
和max-value-in-group
를 찾습니다(위에서 해결됨). 그런 다음 테이블을 하위 쿼리에 조인하고max-value-in-group
에서 동일하게 만듭니다.으아악
왼쪽 조인, 조인 조건 및 필터 조정group-identifier
이 방법에서는 테이블 자체를 조인하게 됩니다.NULL
(这是一个LEFT JOIN
1단계를 수행하면 실제로 가장 큰 값을 갖는 행이 오른쪽에 표시됩니다으아악
결론group-identifier
具有max-value-in-group
max-value-in-group
이 포함된 두 개의 행두 접근 방식 모두 성능 친화적이지만 상황이 다를 수 있습니다(RDBMS, 데이터베이스 구조, 인덱스 등). 따라서 다른 방법보다 한 가지 방법을 선택할 때 Benchmark
를 사용하세요. 그리고 자신에게 가장 적합한 것을 선택하십시오. 🎜