2013-05-17 2 views
0

각 우편 번호에 대해 1 개의 항목 만 갖기를 원하지만 하나 이상의 항목이 있습니다. 여기에 코드입니다 :SQL : 다른 속성을 가진 다중 항목

select * from xyz 
order by plz 

는 그리고이 결과 :

Zipcode Longitude Latitude 
----------------------------------- 
01067 13,7143948 51,0592796 
01067 13,6753  51,0837 
01067  
01067 13,6649834 51,0426555 
01067 13,7617695 51,0538158 
01067 13,75  51,05 
01067 13,7366  51,0507 
01069 13,7366  51,0507 
01069  
01069 13,75  51,05 
01069 13,7617695 51,0538158 
01069 13,6649834 51,0426555 
01069 13,6753  51,0837 
01090  
01097 13,6649834 51,0426555 
01097 13,7617695 51,0538158 
01097 13,6753  51,0837 
01097 13,75  51,05 

가 지금은

감사를 선택 내 결과에서 가장 높은 "경도"- 값에 해당 우편 번호를 갖고 싶어

답변

0
select zipcode, max(Longitude), max(Latitude) from xyz 
group by zipcode 
order by plz 

당신이 할 수있는 다른 애그리 게이터 (분, 첫 번째, 마지막 ...)

0 필요한 경우
0

사용 GROUP BY

select Zipcode,max(Longitude),max(Latitude) from xyz 
group by Zipcode 
order by plz 
0

그는 단지 최대 경도를 원했다, 그래서 우리가 분석 함수가 여기에 적합 할 수 있습니다이

select Zipcode, max(Longitude) , Latitude 
from xyz 
group by zipcode 
order by plz 
+0

해당 구문은 Oracle에서 작동하지 않습니다. 모든 집계되지 않은 열을 기준으로 그룹화해야합니다. '우편 번호, 위도 '로 그룹화하면 각'우편 번호 '에 대해 서로 다른'위도 '를 사용하여 여러 행을 얻을 수 있지만 모두 동일한 (최대)'경도 '로되어 OP와 비슷한 소리는 들리지 않습니다. 원한다. –

+0

@AlexPoole 감사합니다. – Moudiz

0

같은 wirte한다 같아요

select zipcode, longitude, latitude 
from (
    select zipcode, longitude, latitude, 
     rank() over (partition by zipcode 
      order by longitude desc nulls last) as rn 
    from xyz 
) 
where rn = 1 
order by zipcode; 

의무적 인 SQL Fiddle.

내부 선택의 rank()은 각 우편 번호 내의 순위를 지정하고 가장 높은 위도 값을 가진 행은 1로 순위가 매겨집니다. 외부 선택은 단지 필터를 가져옵니다.

관련 문제