찾다

 >  Q&A  >  본문

각 그룹화된 결과에서 처음 n개의 레코드를 가져옵니다.

<p>다음은 가능한 가장 간단한 예이지만 모든 솔루션은 필요한 n개의 상위 결과로 확장할 수 있어야 합니다. </p> <p>사람, 그룹, 연령에 대한 열이 포함된 다음 표에서 각 그룹에서 가장 나이 많은 사람 2명을 어떻게 구할 수 있습니까? (그룹 내의 동점자는 더 많은 결과를 생성해서는 안 되며 대신 알파벳 순서로 상위 2개를 제공해야 합니다.) </p> <사전> +---------+---------+-----+ 인원 | +---------+---------+-----+ 밥 1 | |질|1|34| 숀 42 | 제이크 2 | 폴 2 | 로라 2 | +---------+---------+-----+ </pre> <p>원하는 결과 세트: </p> <사전> +---------+---------+-----+ 숀 42 | |질|1|34| 로라 2 | 폴 2 | +---------+---------+-----+ </pre> <시간>

@Bohemian으로부터 MySQL에 대한 좋은 답변을 얻었습니다: </p> <pre class="brush:php;toolbar:false;">선택 * from(`그룹`, 연령 설명, 개인별 mytable 순서에서 * 선택) x `그룹`으로 그룹화</pre> <p>이것을 기반으로 구축할 수 있으면 좋겠지만 어떻게 해야 할지 모르겠습니다. </p>

P粉785957729P粉785957729449일 전431

모든 응답(2)나는 대답할 것이다

  • P粉340264283

    P粉3402642832023-08-22 19:25:52

    다른 데이터베이스에서는 ROW_NUMBER来实现此功能。MySQL不支持ROW_NUMBER를 사용할 수 있지만 변수를 사용하여 시뮬레이션할 수도 있습니다.

    으아악

    온라인 데모: sqlfiddle


    Edit 방금 bluefeet이 매우 유사한 답변을 게시한 것을 확인했습니다. 그 사람에게 +1입니다. 하지만 이 답변에는 두 가지 작은 장점이 있습니다.

    1. 단일 쿼리입니다. 변수는 SELECT 문 내에서 초기화됩니다.
    2. 질문에 설명된 병렬 상황을 처리합니다(이름의 알파벳순).

    그래서 누군가에게 도움이 될까 해서 보관하겠습니다.

    회신하다
    0
  • P粉404539732

    P粉4045397322023-08-22 13:19:02

    다음은 UNION ALL(请参见带有演示的SQL Fiddle)。这适用于两个组,如果你有多个组,则需要指定group编号并为每个group를 사용하여 쿼리를 추가하는 방법입니다.

    으아아아

    이를 달성하는 방법은 여러 가지가 있습니다. 상황에 가장 적합한 방법을 결정하려면 이 문서를 참조하십시오.

    http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

    편집자:

    이 방법은 각 레코드에 대한 줄 번호를 생성하는 데에도 도움이 될 수 있습니다. 위 링크의 예를 사용하면 행 번호가 2보다 작거나 같은 레코드만 반환됩니다.

    으아아아

    데모

    보기

    회신하다
    0
  • 취소회신하다