나는 (내 스킬 레벨에서) 특히 어려운 쿼리를 선택하고 있습니다. 데이터베이스에 데이터가4 개 (maleName/femaleName/size/id) 인 데이터가 있습니다. 열 데이터는 다소 자명합니다. 나는 각 칼럼에 따라 남성의 이름, 여성의 이름, 아이디 (단지 값 1 또는 2를 얻는다)를 가진다. 유일한 문제는 남성과 여성의 이름 (부부로 표시)이 1 회 이상 나타납니다.그룹에 따라 postgreSQL 최대 선택
Database example.
# | MaleName | FemaleName | Size | ID
1 - John - Mary - 9 - 1
2 - Nick - Stacey - 6 - 1
3 - Mike - Rachel - 2 - 1
4 - John - Mary - 3 - 2
5 - Mike - Rachel - 20 - 2
6 - Nick - Stacey - 13 - 2
etc...
내가 필요로하는 각 부부의 최대 (크기)와이 속한 ID를 반환하는 선택 쿼리입니다 ... 내가 지금까지 했어 '무엇
Result example.
# | MaleName | FemaleName | Size | ID
1 - John - Mary - 9 - 1
2 - Nick - Stacey - 13 - 2
3 - Mike - Rachel - 20 - 2
이입니다 :
select a.Mname,a.Fname,a.size
from mytable a , mytable b
where a.id=b.id and
a.size in (select max(a.size) from mytable a , mytable b where a.id=b.id)
group by a.Mname, a.Fname, a.size;
나는 가깝거나 완전히 잘못되었는지 알 수 없습니다. 이 결과는 1 결과를 반환합니다. 약간의 조정이나 총 재 작성이 필요할 수도 있습니다. 어떤 도움이라도 대단히 감사하겠습니다! 미리 감사드립니다.
친절하게 제공합니다.
select mname, fname, size, id
from (select t.*,
row_number() over (partition by t.mname, t.fname order by t.size desc) as seqnum
from mytable t
) t
where seqnum = 1
기능 row_number()
는 그룹 내에서 행에 일련 번호를 할당 :이 많은 데이터베이스에서 작동하기 때문에
대단히 감사합니다. 불행히도 나는 당신이 나에게 준 것을 시도해 보았고, 부분적으로 (커플 등을 그룹으로 묶어서) 작동하지만 작은 숫자의 커플을 걸러 내지 못한다. –
@GeorgeElementSotiriou. . . 당신의 쿼리에'where seqnum = 1'이 있습니까? 파티션 분할 절이 두 이름 만 포함합니까? –
그 답변은 모두에게 그렇습니다. 또한 나는 그것이 나 자신에 의해 그렇게되어야한다는 것을 알았 기 때문에 당신이 몇 분 전에 편집 한 "mytable t"부분을 이미 정정했다. 아직도 분할이 이루어지면서 나는 동일한 "커플"을 차례대로 크기를 내림으로써 결정하지만 가장 작은 크기의 결혼 커플을 배제하지 못합니다. 너의 인생을 힘들게해서 미안해 ...! : –