SQL은 열에 최대값이 있는 행만 선택합니다.
P粉937382230
P粉937382230 2023-08-23 11:08:57
0
2
372

다음 문서 양식이 있습니다(간단한 버전은 다음과 같습니다).

<테이블 클래스="s-테이블"> <머리> <번째> ID <번째> 환승 <번째> 콘텐츠 <본문> 1 1 ... 2 1 ... 1 2 ... 1 3 ...

ID당 하나의 행을 선택하고 가장 큰 RPM만 선택하는 방법은 무엇입니까?

위 데이터를 사용하면 결과에는 [1, 3, ...][2, 1, ..] . 저는MySQL을 사용하고 있습니다.

현재 저는 while 루프에서 검사를 사용하여 결과 집합에서 이전 버전을 감지하고 덮어쓰고 있습니다. 하지만 이것이 이 결과를 얻을 수 있는 유일한 방법일까요? SQL 솔루션이 없나요?

P粉937382230
P粉937382230

모든 응답 (2)
P粉638343995

저는 가능한 한 적은 코드를 사용하는 것을 선호합니다...

이 작업은IN를 사용하여 수행할 수 있습니다. 이것을 시도해 보세요:

으아아아

제 생각에는 덜 복잡하고... 읽고 유지하기가 더 쉽습니다.

    P粉517475670

    첫눈에...

    필요한 것은MAX聚合函数的GROUP BY:

    이 포함된 절뿐입니다. 으아악

    일이 그렇게 간단할 수가 없잖아요?

    content개도 필요하다는 사실을 방금 확인했습니다.

    이것은 SQL에서 매우 일반적인 문제입니다. 각 그룹 식별자 열에 최대값이 있는 행의 모든 데이터를 찾습니다. 저는 직장 생활을 하면서 이런 말을 자주 듣습니다. 사실 이것은 제가 현 직장에서 기술면접을 할 때 대답한 질문 중 하나였습니다.

    실제로 Stack Overflow 커뮤니티에서는 다음과 같은 질문을 처리하기 위해이라는 태그를 만들었습니다.

    기본적으로 이 문제를 해결하는 방법에는 두 가지가 있습니다.

    간단한group-identifier, max-value-in-group하위 쿼리 조인 사용

    이 접근 방식에서는 먼저 하위 쿼리에서group-identifier, max-value-in-group(上面已解决)。然后,将表连接到子查询,并在group-identifiermax-value-in-group를 찾습니다(위에서 해결됨). 그런 다음 테이블을 하위 쿼리에 조인하고

    max-value-in-group에서 동일하게 만듭니다.

    으아악

    왼쪽 조인, 조인 조건 및 필터 조정

    group-identifier이 방법에서는 테이블 자체를 조인하게 됩니다.

    에는 평등이 존재합니다. 그런 다음 2가지 현명한 움직임:
    1. 두 번째 연결 조건은 왼쪽 값이 오른쪽 값보다 작다는 것
    2. NULL(这是一个LEFT JOIN1단계를 수행하면 실제로 가장 큰 값을 갖는 행이 오른쪽에 표시됩니다
    3. , 기억하시나요? ). 그런 다음 조인 결과를 필터링하여 오른쪽에 NULL이 있는 행만 표시합니다.

    결국:

    으아악

    결론

    두 가지 방법 모두 동일한 결과를 가져옵니다.

    group-identifier具有max-value-in-groupmax-value-in-group이 포함된 두 개의 행

    이 있는 경우 두 방법의 결과에 두 행이 모두 표시됩니다.

    두 가지 방법 모두 SQL ANSI와 호환되므로 "특성"에 관계없이 선호하는 RDBMS와 함께 작동합니다.

    두 접근 방식 모두 성능 친화적이지만 상황이 다를 수 있습니다(RDBMS, 데이터베이스 구조, 인덱스 등). 따라서 다른 방법보다 한 가지 방법을 선택할 때Benchmark

    를 사용하세요. 그리고 자신에게 가장 적합한 것을 선택하십시오.
      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!