다음은 가능한 가장 간단한 예이지만 모든 솔루션은 필요한 n개의 상위 결과로 확장할 수 있어야 합니다.
사람, 그룹, 연령에 대한 열이 포함된 다음 표에서 각 그룹에서 가장 나이 많은 사람 2명을 어떻게 구할 수 있습니까? (그룹 내의 동점자는 더 많은 결과를 생성해서는 안 되며 대신 알파벳 순서로 상위 2개를 제공해야 합니다.)
<사전> +---------+---------+-----+ 인원 | +---------+---------+-----+ 밥 1 | |질|1|34| 숀 42 | 제이크 2 | 폴 2 | 로라 2 | +---------+---------+-----+원하는 결과 세트:
<사전> +---------+---------+-----+ 숀 42 | |질|1|34| 로라 2 | 폴 2 | +---------+---------+-----+ <시간>@Bohemian으로부터 MySQL에 대한 좋은 답변을 얻었습니다:
선택 * from(`그룹`, 연령 설명, 개인별 mytable 순서에서 * 선택) x `그룹`으로 그룹화
이것을 기반으로 구축할 수 있으면 좋겠지만 어떻게 해야 할지 모르겠습니다.
시간>
다른 데이터베이스에서는
으아악ROW_NUMBER
来实现此功能。MySQL不支持ROW_NUMBER
를 사용할 수 있지만 변수를 사용하여 시뮬레이션할 수도 있습니다.온라인 데모:sqlfiddle
Edit방금 bluefeet이 매우 유사한 답변을 게시한 것을 확인했습니다. 그 사람에게 +1입니다. 하지만 이 답변에는 두 가지 작은 장점이 있습니다.
그래서 누군가에게 도움이 될까 해서 보관하겠습니다.
다음은
으아아아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보다 작거나 같은 레코드만 반환됩니다.
으아아아데모
보기