2013-10-16 3 views
0

저는 숙제가 될 것입니다.하지만 몇 시간 동안이 문제에 갇혀 있었고 방금 올바른 방향으로 밀고 자했습니다. 첫째로 나는 당신에게 내 질문의 관계 및 배경에 대한 HW 질문에, 나는 설명 할 것이다주지 :"그룹 사용이 잘못되었습니다"오류가있는 SQL 그룹화

지점 (BookCode, BranchNum, - 남은)을

HW 문제 :이 모든 지점에 대한 BranchNum를 나열 최소 10 권의 책을 소장 한 적어도 한 권의 책.

내 질문 : BookCode로 그룹화 된 SUM (OnHand)을 가져와야한다는 것을 이해합니다. 그런 다음 어떻게 BranchNum에서 그룹화합니까? 이것은 내가 함께 와서 다양한 버전의 어떤 논리적이다. "그룹 기능의 사용이 잘못되었습니다"

select distinct BranchNum 
from Inventory 
where sum(OnHand) >= 10 
group by BookCode; 

하지만 난라는 오류가 계속

누군가 여기서 잘못된 점을 설명해 주시겠습니까?

업데이트 : 나는 내가 HAVING 문을 사용했다, 지금은 이해, 기본적인 형태는 이것이다 :

select distinct (what you want to display) 
from (table) 
group by 
having 
+1

* push * -> http://www.techonthenet.com/sql/having.php – Phil

+1

WHERE 절보다 HAVING sum (OnHand)> = 10을 사용해야 할 것으로 추측됩니다. [here ] (http://stackoverflow.com/questions/2330840/mysql-invalid-use-of-group-function) –

+2

모든 '집계되지 않은'열, 즉 합산되지 않고 계산 된 모든 열을 그룹화해야합니다. –

답변

0

이 하나를 시도하십시오. 질문에 모든 댓글이 유효하고 모든 쿼리가 작동하지 않는 이유는없는 것 같다 정보를 추가하는 것하지만

SELECT BranchNum 
FROM Inventory 
GROUP BY BranchNum 
HAVING SUM(OnHand) >= 10 

또한 예를 here.

0

와 GROUP BY 절을 찾을 수 있습니다. 이유는 간단하며 sum이 계산되는 주/단계와 엄격하게 관련됩니다.

where 절이 먼저 실행됩니다. 즉, 처음부터 모든 행을 필터링합니다. 그런 다음 group by이 적용되고 절에 지정되지 않은 모든 행이 병합되고 집계 된 함수 (있는 경우)가 적용됩니다.

따라서 데이터를 그룹화하고 필터링하기 전에 집계하려는 where 절에 집계 된 함수를 추가하려고하면 데이터가 그룹화되고 필터링되기 전에 집계하려고합니다. having 절은 group by 뒤에 실행되며 집계 된 함수는 이미 계산 된대로 필터링 할 수 있습니다.

그런 이유로 HAVING SUM(OnHand) >= 10을 쓸 수 있으며 WHERE SUM(OnHand) >= 10을 쓸 수 없습니다.

희망이 도움이됩니다.