2012-06-10 4 views
-1

아래 코드 고려 : 내가 마지막 줄을 제거하면SQL Server 오류 "열이 유효하지 않습니다"가 표시되는 이유는 무엇입니까?

select vend_id, COUNT(vend_id) as num_prods 
from Products 
group by vend_id 

을, 나는 다음과 같은 오류가 발생합니다 :

Column 'Products.vend_id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

왜이 오류는 어떻게해야합니까? 내가 (카운트가 어떻게 작동하는지 이해함) 실수는 무엇입니까? 하여 그룹을 사용하지 않고 쿼리를 작성

+0

count()가 얼마나 정확하게 작동하는지 알려주세요. 어쩌면 내 개념적 이해가 잘못되었을 수도 있습니다. – YourDataInsecure

+0

당신이 맞다고 생각합니다. 열의 철자가 올바른지 확인하십시오. – zneak

+2

원하는 결과는 무엇입니까? – dodexahedron

답변

0

대체 방법 :

select vend_id, (select COUNT(*) from Products as products1 where products1.vend_id = Products.vend_id) as num_prods 
from Products 
+0

나는 그것이 다른 것을하지 않을 것이라고 확신한다. – zneak

+0

@zneak 예, 동의합니다. 동일한 결과를 줄 것입니다. –

+0

아니, 다른 결과가 나옵니다. 훨씬 다른. – YourDataInsecure

2

카운트 집계 함수입니다.

쿼리에서 정의한 집합의 항목 수를 반환합니다.

쿼리에 열이 없으면 count는 쿼리에서 반환 한 총 행 수를 계산합니다.

선택 목록에 다른 열을 추가하는 경우 개수 계산의 의미를 부여하려면 명령문별로 그룹을 추가해야합니다. Group by는 집계 함수가 group by 문에서 열에 대해 동일한 값을 갖는 모든 행에서 작동하도록 지시합니다.

질문에 입력 한 쿼리는 고유 한 vend_id 값 목록과 해당 값이 주어진 테이블에있는 횟수를 반환합니다. vend_id 열이 해당 테이블의 고유 키인 경우 각 행에 대해 vend_id 및 1 목록 만 가져옵니다.

이 COUNT 함수의 자세한 설명은 문서를 참조하십시오 http://msdn.microsoft.com/en-us/library/ms175997(v=sql.105).aspx

집계 함수의 설명은이 문서를 참조하십시오, 일반적으로 : http://msdn.microsoft.com/en-us/library/ms173454(v=sql.105).aspx

+0

이것은 내가 준 첫 번째 링크에서 보는 것입니다. 나는 설명에서 단어 그룹을 알아 차렸다. 그래서, 그룹없이 카운트하는 것은 의미가 없다, 그렇지? COUNT (*)는 그룹에있는 항목 수를 반환합니다. 여기에는 NULL 값과 중복이 포함됩니다. COUNT (ALL 표현식)는 그룹의 각 행에 대해 표현식을 평가하고 널이 아닌 값의 수를 반환합니다. COUNT (DISTINCT 식)는 그룹의 각 행에 대한 식을 계산하고 고유하지 않은 Null 값의 수를 반환합니다. – YourDataInsecure

+0

예. 바로 그것이 작동하는 방법입니다. 더 이상의 질문이 있으십니까? – dodexahedron

+0

예, 지금은 분명합니다. 고마워요 :) – YourDataInsecure

0

당신이를 제거 할 때 때문에이 오류가 발생됩니다 쿼리의 마지막 줄에 집계 함수 count(vend_id)과 집계되지 않은 함수 vend_id 둘 다에서 vend_id를 선택합니다. 하나의 합계 열 (하나는 개수)과 하나의 세부 열 (개수 제외)를 요구합니다. 집계되지 않은 열을 사용하여 SQL Server에 처리 할 작업을 지정해야합니다.

select vend_id 
from Products 

select count(vend_id) 
from Products 

위의 쿼리는 모두 유효합니다. vend_id를 선택하고 그 수를 계산하려면 그룹화해야합니다.

+0

당신은 그룹을하지 않고 카운트가 의미가 없다고 말하고 있습니까? – YourDataInsecure

+0

아니요, 단지 다릅니다. 테이블에있는 모든 vend_id를 계산하면 총 합계가 계산됩니다. vend_id를 선택하고 그룹화하는 동안 vend_id를 계산하면 테이블에서 각각의 다른 vend_id를 계산할 수 있습니다. –

관련 문제