2014-12-29 2 views
1

"id", "location", "local_rate", "long_rate"열이있는 테이블 "rate"가 있습니다. Id는 클라이언트를 구분할 정수 값입니다. 결과는 위치별로 그룹화됩니다. 각 위치 그룹에는 각 클라이언트의 항목이 있습니다. 각 클라이언트에는 다른 local_rate 및 long_rate가 있습니다. 내가 얻고 자하는 것은 위치, 가장 낮은 local_rate와 그 비율을 가진 클라이언트, 그리고 가장 낮은 long_rate와 그 비율을 가진 클라이언트입니다. 테이블의 각 위치에 행이 있습니다. 비율에 대해 일치하는 결과가 여러 개인 경우 하나만 선택하고 해당 값으로 클라이언트 ID를 반환해야합니다.여러 개의 다중 조인을 사용하여 여러 값 가져 오기

location1 | id(min_local_rate) | min_local_rate | id(min_long_rate) | min_long_rate 
location2 | id(min_local_rate) | min_local_rate | id(min_long_rate) | min_long_rate 
.... 

가 여기에 지금까지 내 쿼리 :로

결과가 표시됩니다

내가 다시 받고 있어요 것은 모든 행에서 같은 로컬 클라이언트 ID와 같은 긴 클라이언트가 무엇
SELECT local.location, local.id, local.local_rate, long.id, long.long_rate 
FROM 
(SELECT MIN(local_rate), location, id FROM rate GROUP BY location) local 
JOIN 
(SELECT MIN(long_rate), location, id FROM rate GROUP BY location) long 
ON local.location = long.location 
GROUP BY local.location; 

모든 행의 이드. 위치, 현지 요금 및 긴 요금이 정확합니다.

답변

1

먼저 하나의 하위 쿼리에서 각 위치의 최소 및 최대 지역 요금을 계산할 수 있습니다. 그런 다음 원본 데이터에 다시 가입하여 클라이언트 ID를 가져올 수 있습니다. 하나의 클라이언트가 최소/최대에있는 경우

, 그 다음은 당신이 원하는 일을해야합니다

select l.location, l.minlr, rmin.id, l.maxlr, rmax.id 
from (select location, min(local_rate) as minlr, max(local_rate) as maxlr 
     from rate r 
     group by location 
    ) l join 
    rate rmin 
    on rmin.location = l.location and rmin.local_rate = l.minlr join 
    rate rmax 
    on rmax.location = l.location and rmax.local_rate = l.maxlr; 

일치 여러 행이있는 경우,이 각각의 위치에 대한 여러 행을 생성합니다. 이 질문에 당신이 무엇을 해야할지 명시하지 않았습니다.

+0

감사합니다. 나는 최대 비율을 전혀 찾고 있지 않다. 나는 가장 낮은 지역 이자율과 최저 비율을 찾고있다. –

+0

@ NewGuy. . . 나는 일반적으로 "요율"을 사용하고있었습니다. –

+0

좋아, 나는 질문을 편집하여 목표를 좀 더 분명하게하려고 노력했다. 하위 쿼리만으로 location, min_local_rate 및 min_long_rate에 필요한 항목을 정확히 수행합니다. 전체 쿼리는 행을 반환하지 않습니다. –

관련 문제