에 의해 그룹에없는 열을 포함,
가 나는 다음과 같은 열이 있다고 가정하자 : 지금SQL 서버, 나는 영구적 인 문제가 문
T:A(PK), B, C, D, E
을
select A, MAX(B) from T group BY A
아니, 나는 할 수 없다 :
내가 왜 ~에 올 때 나는 이해가 가지 않는다또는 SUM
알겠습니다. 그러나 MAX
또는 MIN
이 정확히 한 행에서 나옵니다.
어떻게 처리하나요?
에 의해 그룹에없는 열을 포함,
가 나는 다음과 같은 열이 있다고 가정하자 : 지금SQL 서버, 나는 영구적 인 문제가 문
T:A(PK), B, C, D, E
을
select A, MAX(B) from T group BY A
아니, 나는 할 수 없다 :
내가 왜 ~에 올 때 나는 이해가 가지 않는다또는 SUM
알겠습니다. 그러나 MAX
또는 MIN
이 정확히 한 행에서 나옵니다.
어떻게 처리하나요?
이 같은 그것을 위해 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;
'where seq = 1' - 무슨 뜻입니까? –
이 대답은 제가 제안하려고했던 것입니다. 하위 쿼리 t는 행에 번호를 매기고, 최대 (B)를 내림차순으로 정렬하고 "seq"라고하는 열에 따라 정렬합니다. 그런 다음 seq = 1을 선택하여 B가 가장 높은 행과 다른 모든 데이터 (예 : C 열)를 선택합니다. –
여러 행 사이에 동점이있을 때 발생하는 상황을 여기서 언급 할 가치가 있습니다. 이 경우 임의로 * 행 *을 선택합니다. –
그의 원인이 열이 또한 group by
조항의 일부가되어야 선택 목록에 포함되어 있습니다. 선택 목록에 그룹의 일부분을 다시 표시하지만 존재하지 않는 열을 가질 수 있지만 그 반대의 경우는 불가능합니다.
일반적으로 그룹화하려는 select 절에 해당 열만 입력하십시오.
시도해보십시오. 그것은 당신의 질문이 매우 명확하지 않습니다
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
당신 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
"MAX 또는 MIN은 정확히 한 행에서 가져옵니다." - 정말? 예를 들어'B' 칼럼에서 둘 이상의 행이 같은 값을 가지며 그 값이 min 또는 max를 나타내는 상황이 발생하지 않았습니까? –
C 열의 데이터로 무엇을하고 싶습니까? 그룹으로 묶으려는 경우 그룹 부분에 추가하십시오 :'from T group BY A, C' 컬럼 C에 대해 원하는 출력이 무엇인지 설명해주십시오. –
디버거에서 허용하지 않는 경우 정확히 하나의 행에서 가져 오지 못함을 의미합니다. – SKLTFZ