각 그룹화된 결과에서 처음 n개의 레코드를 가져옵니다.
P粉785957729
P粉785957729 2023-08-21 19:55:22
0
2
455
<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粉785957729
P粉785957729

모든 응답(2)
P粉340264283

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

으아악

온라인 데모: sqlfiddle


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

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

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

P粉404539732

다음은 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보다 작거나 같은 레코드만 반환됩니다.

으아아아

데모

보기
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿