다음 문제에 대한 쿼리를 공식화하는 데 문제가 있습니다.특정 조건에 대해 고유 한 쌍 값을 선택하는 SQL 쿼리 작성 방법은 무엇입니까?
특정 점수가있는 쌍 값의 경우 가장 좋은 점수를 가진 별개 쌍 값만 반환하는 방식으로 그룹화하는 방법은 무엇입니까?
(t1,p1,65)
(t1,p2,60)
(t1,p3,20)
(t2,p1,60)
(t2,p2,59)
(t2,p3,15)
처음 두 열 쌍의 값을 표시하고 세 번째 열은 쌍 score.The 최고 점수가 (t1,p1,65)
입니다 나타냅니다
예를 들어, 나는 다음과 같은 행 값이있는 테이블이 있다고 할 수 있습니다. 이제 t1과 p1이 사용되었으므로 이후 분석에서 제외하고 싶습니다.
다음으로 높은 점수는 (t2,p2,59)
입니다. (t1,p2)
의 점수가 60 점이라도 "t1"이 이미 사용 되었기 때문에 제외하고 싶습니다. (t2,p1)
도 60의 스코어를 갖지만, P1이 이미 사용하고 있기 때문에,이 쌍은 제외 이것의 고유 한 쌍의 스코어 값을 초래
:.
(t1,p1,65)
(t2,p2,59)
가되어이 생성 할 수있는 방법을 결과를 그룹화하고 파티셔닝하는 방법을 생각해 보려고했으나 점수 순위에 따라 이미 사용 된 값에 대한 회계가 있어야하기 때문에 접근하기가 매우 어렵습니다.
편집 :
데이터 생성하려면 :
with t(t, p, score) as (
(values ('t1','p1',65),
('t1','p2',60),
('t1','p3',20),
('t2','p1',60),
('t2','p2',59),
('t2','p3',15)
))
select t.* from t;
흥미로운 질문입니다. :) – borowis
''p1'을 제외해야한다면 왜'(t2, p1, 60)'이 나올까요? – borowis
재귀 CTE를 사용하여이 문제를 해결해야합니다. –