이 예에서는 동점을 해결하기 위해 알파벳 순서를 고려하여 SQL 테이블의 각 그룹 내에서 가장 나이가 많은 사람을 식별하는 방법을 보여줍니다. 테이블 구조에는 'Person', 'Group' 및 'Age' 열이 포함됩니다.
예제 표:
Person | Group | Age |
---|---|---|
Bob | 1 | 32 |
Jill | 1 | 34 |
Shawn | 1 | 42 |
Jake | 2 | 29 |
Paul | 2 | 36 |
Laura | 2 | 39 |
목표: 연령이 동일할 경우 알파벳순으로 우선순위를 정하여 각 그룹에서 가장 나이가 많은 사람을 찾습니다.
SQL 솔루션:
<code class="language-sql">SELECT o.* FROM Persons o LEFT JOIN Persons b ON o.Group = b.Group AND (o.Age < b.Age OR (o.Age = b.Age AND o.Person > b.Person)) WHERE b.Person IS NULL;</code>
설명:
이 쿼리는 LEFT JOIN
을 사용하여 각 사람(o
)을 같은 그룹(b
)에 있는 다른 모든 사람과 비교합니다. ON
절은 다음 중 하나에 해당하는 행을 필터링합니다.
o.Age < b.Age
: o
은 b
보다 어립니다. 즉, o
은(는) 맏형이 아닙니다.o.Age = b.Age AND o.Person > b.Person
: o
은 b
과 같은 나이이지만 알파벳순으로 늦습니다(o
가 알파벳순으로 가장 오래되지 않았다는 의미).WHERE b.Person IS NULL
절은 o
에서 일치하는 행을 b
에서 필터링하여 각 그룹에서 가장 나이가 많은 사람(또는 동점인 경우 알파벳순으로 첫 번째)만 남깁니다.
추가 탐색:
고급 SQL 기술과 잠재적인 함정에 대해 더 포괄적으로 이해하려면 "SQL 안티패턴 볼륨 1: 데이터베이스 프로그래밍의 함정 방지"와 같은 리소스를 참조하세요.
위 내용은 SQL의 각 그룹에서 가장 나이 많은 사람을 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!