2014-04-23 3 views
0

게시자 이름 및 카테고리별로 책의 평균 소매 가격을 얻으려고합니다. 나는 단지 '어린이'와 '컴퓨터'카테고리와 평균 소매가가 $ 50 이상인 그룹을 포함시키고 자합니다. 나는 붙어있다!Oracle SQL에서 평균을 얻으려고 시도합니다

SELECT PUBLISHER.NAME, BOOKS.CATEGORY 
    TO_CHAR(AVG(BOOKS.RETAIL), '99.99') "Avg Retail" 
FROM BOOKS, PUBLISHER 
WHERE BOOKS.category='CHILDREN' or BOOKS.category='COMPUTER' and AVG > 50; 
+0

당신은'BOOKS'와'PUBLISHER'의 데카르트 조인이 있습니다. 이 테이블을 결합하는 올바른 방법을 찾아야합니다. –

+0

'GROUP BY'와'HAVING' 절을 검색하면 튜토리얼과 예제가 많이 있습니다. – krokodilko

답변

1

SQL 쿼리를 작성하는 방법에 대해 여러 가지를 배워야합니다.

먼저 항상 join 명시 적 구문을 사용하십시오. 쉬운 규칙은 다음과 같습니다. from 절에 쉼표를 사용하지 마십시오.

둘째로, 두 테이블을 무언가에 join 두어야합니다. PublisherId과 같은 입력란을 추측하고 있지만 실제로 올바른 필드를 알고있을 수 있습니다.

셋째, inor 절보다 훨씬 명확합니다.

네, avg()where 절에 포함 할 수 없습니다. 이것이 having 절의 목적입니다.

여러 개의 결과 행이 예상되는 집계를 수행하는 경우 다섯, group by이 필요합니다.

SELECT p.NAME, b.CATEGORY, TO_CHAR(AVG(b.RETAIL), '99.99') as "Avg Retail" 
FROM BOOKS b JOIN 
    PUBLISHER p 
    on b.PublishedId = b.PublisherId 
WHERE b.category in ('CHILDREN', 'COMPUTER') 
GROUP BY p.NAME, b.CATEGORY 
HAVING AVG(b.RETAIL) > 50; 
+0

알았어요, 고마워요! –

+0

6 개 (GL의 쿼리에 실수가 없으므로 이제는 관계가 없음) "및"& "또는"조건을 혼합 할 때 대괄호가 필요합니다. –

관련 문제