2012-10-03 3 views
1

한 열의 고유 값을 다른 열의 최대 값과 함께 필터링하여 표의 모든 열을 가져 오는 것과 같은 요구 사항이 있습니다.다른 열의 최대 값과 함께 한 열의 고유 값을 가진 레코드 가져 오기

예 : 최대 (수량)와 함께 고유 한 이름을 가져 오는

여기
Table A 

id name qty 
__ __ __ 

1 Dinesh 10 
2 Ramesh 8 
3 Dinesh 2 
4 Ganesh 3 
5 Ganesh 20 

;

예상 출력 :

1 Dinesh 10 
2 Ramesh 8 
5 Ganesh 20 

사람이 DB2 쿼리에서이를 달성하는 방법을 말할 수 있습니까? 사전

답변

2

에서

덕분에이 작업을 수행하기 위해 상관 관계 서브 쿼리를 사용할 수 있습니다.

SELECT T.id, T.name, T.qty 
FROM tableA T 
WHERE T.qty = (
    SELECT MAX(qty) 
    FROM tableA 
    WHERE name = T.name 
) 

그러나, 동일한 이름과 최대 수량 (예 : 6 Dinesh 10)와 또 다른 기록이있는 경우 다음 두 레코드가 반환됩니다 있습니다.

SELECT T.id, T.name, T.qty 
FROM tableA T 
WHERE NOT EXISTS (
    SELECT 1 
    FROM tableA 
    WHERE name = T.name 
     AND qty > T.qty 
     OR (id > T.id AND qty = T.qty) 
    ) 
+0

그는 첫 번째 경우가 아닌 고유 한 값이 필요하다고 말합니다. 또한 두 번째 경우에서 당신의 방식대로, 당신은 단지 '별개'를 선택에 사용할 수 없습니까? – MazarD

+2

@MazarD - 각 행은 고유 한 ID를 가지므로 'DISTINCT'를 사용하면 모든 행을 반환합니다. 나는 당신이 말하는 것을보고 이름과 수량 컬럼이 필요한 경우 – acatt

+0

이 맞다. 고마워, 나는 나의 대답을 편집했다. – MazarD

1

// 편집 : 다음 acatt 주석 내가 요구 사항을 이해 한 후 ...

또 다른 옵션은 다음과 같습니다 또한

SELECT t.id, t.name, t.qty 
    FROM tableA t 
WHERE (t.name, t.qty) in (
    SELECT q.name, max(q.qty) 
    FROM tableA q 
    group by q.name 
) 

을이 약간 다르게 쿼리를 기록 할 수 해결 될 수 있습니다 동일한 이름과 수량을 가진 모든 행을 반환한다고 생각하면

+0

'SQLCODE = -122, ERROR : 위에서 언급 한 것처럼 쿼리를 실행하는 동안 선택 목록의 열 또는 표현이 유효하지 않습니다. – Dinesh

관련 문제