> """"제품별 주문량이 언제 몇개인지 주문일자 순으로(ASC)...""""
>
>
> 를 group by 와 order by 에 의해 수행하려 합니다.
> 근데 자꾸 에러가 납니다.
>
> SQL> select product.id, product.name, item.quantity, ord.date_ordered from s_ord ord, s_product
> prod
> uct, s_item item group by product.id order by ord.date_ordered;
> select product.id, product.name, item.quantity, ord.date_ordered from s_ord ord, s_product produ
> ct,
> *
> ERROR at line 1:
> ORA-00979: not a GROUP BY expression
>
항상 에러 메세지에 주의 하시길...
select select_column_lists
from table_lists
group by group_column_lists
이렇게 되었을 때 select_column_lists 에는
group_column_lists 에 존재 하는 칼럼만 독립적으로 존재할
수 있고, 그 이외의 칼럼이 오려면 반드시 그룹 함수(sum, max, min...)
를 사용해야만 합니다.
위에서 보면 그룹은 product.id 만 사용하는 비해서
select 에서 product.name, item.quantity, ord.date_ordered
칼럼이 있으니 당연히 안됩니다.
그러나 여기서 문제( 제품별 주문량이 언제 몇개인지 주문일자 순으로(ASC)... )를
좀 더 쉽게 생각하면
제품별 주문일자별 주문량 합계을 구해서 제품별 주문일자 순으로 display
하라는 것이 아닐까요?
단순하게 이렇게 해석된 것이 맞다면 아래와 같이 하면 될지도.
select product.id, product.name, sum(item.quantity), ord.date_ordered
from s_ord ord, s_product product, s_item item
group by product.id , product.name, ord.date_ordered
;
( group by 는 기본적으로 sorting을 수행하기 때문에
여기서 id,name,date 별로 display 하려고 하면 order by 생략 가능 )
그런데 테이블 생성 문장을 보아서 ( 약간은 이상하지만 )
s_ord --< s_item >-- s_product의
관계를 같는 것 같군요.
만약 이 경우라면 s_item, s_ord 에서 inline view를 사용해서
결과를 내고 나중에 s_product와 join해서 이름을 갖고 오는 것이
수행 속도를 빠르게 할 것 같군요.
그런데 s_item의 PK가 (ord_id, product_id) 나 ( item_id )가 아니고
(ord_id, item_id) 이라서 제가 오해할 수도 있겠네요.
|