2017-12-28 42 views
0

item_name 및 item_cost 열이 있습니다. 내가 AVG (ITEM_COST)를 사용하여 차이를 표시 할 때 항상 난 그냥 item_name의 목록을 만들고 싶어 단일 그룹의 그룹 기능을 나에게 ITEM_COST와 쇼를오라클 - 어떻게 열을 선택하고 평균을 기준으로 차이를 보여?

를 오류

하지를 제공 각각의 item_cost와의 차이는 avg(item-cost) - item_cost을 사용하는 모든 item_cost의 평균값입니다.

이것은 내 쿼리 구문입니다. 구문이 잘못 되었습니까?

SELECT item_name, 
    item_cost, 
    AVG(item_cost) AS Avgcost, 
    AVG(item_cost)-item_cost AS Difference 
FROM item; 
+0

"일반"열 선택을'avg()'와 같은 그룹 기능과 함께 사용할 수 없습니다. 그룹화해야합니다. –

답변

3

당신은 분석 기능하지 않고, OVER() 절 여기

SELECT item_name, 
    item_cost, 
    AVG(item_cost) OVER() AS Avgcost, 
    AVG(item_cost) OVER() -item_cost AS Difference 
FROM item; 
+0

OVER()는 무엇을 의미합니까? 죄송합니다. 데이터베이스에 새로 왔습니다. – sekti92

+0

@ sekti92 :'AVG (item_cost) OVER()'는 select에서 가져온 모든 항목의 평균 item_cost를 의미합니다. –

+0

이 구문이 작동 중입니다. " Concert_name, concg_name (concert_cost)를 concert_name의 concert 그룹에서 average_cost로 선택하십시오." "avg (concert_cost) - concert_cost as difference"와 같은 새 열을 추가 할 때 오류가 발생했습니다. 그게 왜? – sekti92

1

다른 옵션의를 사용할 수 있습니다.

WITH avgcost AS (SELECT AVG (item_cost) avg_cost FROM item) 
SELECT i.item_name, 
     i.item_cost, 
     a.avg_cost, 
     a.avg_cost - i.item_cost diff_cost 
    FROM item i, avgcost a;