2017-01-12 1 views
0

에 의해 그룹에없는 열을 포함,
가 나는 다음과 같은 열이 있다고 가정하자 : 지금SQL 서버, 나는 영구적 인 문제가 문

T:A(PK), B, C, D, E 

select A, MAX(B) from T group BY A 

아니, 나는 할 수 없다 :

내가 왜 ~에 올 때 나는 이해가 가지 않는다또는 SUM 알겠습니다. 그러나 MAX 또는 MIN이 정확히 한 행에서 나옵니다.

어떻게 처리하나요?

+3

"MAX 또는 MIN은 정확히 한 행에서 가져옵니다." - 정말? 예를 들어'B' 칼럼에서 둘 이상의 행이 같은 값을 가지며 그 값이 min 또는 max를 나타내는 상황이 발생하지 않았습니까? –

+1

C 열의 데이터로 무엇을하고 싶습니까? 그룹으로 묶으려는 경우 그룹 부분에 추가하십시오 :'from T group BY A, C' 컬럼 C에 대해 원하는 출력이 무엇인지 설명해주십시오. –

+0

디버거에서 허용하지 않는 경우 정확히 하나의 행에서 가져 오지 못함을 의미합니다. – SKLTFZ

답변

1

이 같은 그것을 위해 ROW_NUMBER()를 사용할 수 있습니다

select A, C, B 
from (
    select * 
     , row_number() over (partition by A order by B desc) seq 
     --      group by^ max(^) 
    from yourTable) t 
where seq = 1; 
+0

'where seq = 1' - 무슨 뜻입니까? –

+0

이 대답은 제가 제안하려고했던 것입니다. 하위 쿼리 t는 행에 번호를 매기고, 최대 (B)를 내림차순으로 정렬하고 "seq"라고하는 열에 따라 정렬합니다. 그런 다음 seq = 1을 선택하여 B가 가장 높은 행과 다른 모든 데이터 (예 : C 열)를 선택합니다. –

+0

여러 행 사이에 동점이있을 때 발생하는 상황을 여기서 언급 할 가치가 있습니다. 이 경우 임의로 * 행 *을 선택합니다. –

0

그의 원인이 열이 또한 group by 조항의 일부가되어야 선택 목록에 포함되어 있습니다. 선택 목록에 그룹의 일부분을 다시 표시하지만 존재하지 않는 열을 가질 수 있지만 그 반대의 경우는 불가능합니다.

일반적으로 그룹화하려는 select 절에 해당 열만 입력하십시오.

0

시도해보십시오. 그것은 당신의 질문이 매우 명확하지 않습니다

SELECT m.f1,s.f2,m.maxf3 FROM 
(SELECT f1,max(f3) maxf3 FROM t1 GROUP BY f1) m 
CROSS APPLY (SELECT TOP(1) f2,f1 FROM t1 WHERE m.f1 = f1) s 
0

당신 MAX 작업을 방금 1 열 (F1)에 의해 MAX를 찾을 수 있도록, 또한 당신이 원하는 컬럼 (F3)를 추가하지만 영향을 수 없습니다 우리는 '때로 믿을 수 당신이 무엇을하려고하는지 확신하지 마십시오.

기본 쿼리에서 그룹을 실제로 수행하지 않고 A 열을 기준으로 B의 최대 값을 반환한다고 가정하면 그렇게 할 수 있습니다.

select A, C,(Select Max(B) from T as T2 WHERE T.A = T2.A) as MaxB from T