2013-05-03 107 views
0

我稱之爲表 'ORDER_DETAILS'「GROUP BY」 工作不正常

enter image description here

和被稱爲PRODUCT_DETAIL enter image description here

我要像

enter image description here

獲取數據表

ORDER_TOTAL將是(數量*價格)的總和 - >(2 * 10)+(2 * 100)+(4 * 20)= 300

我用下面的查詢

Select Order_id, (ROUND(SUM(ql.price * ql.quantity), 2) Order_total 
From ORDER_DETAILS o 
Inner join PRODUCT_DETAIL p 
On o.order_id=p.order_id 
Group by Order_id 

但它給錯誤ORA-00979: not a GROUP BY expression

我在做什麼錯在這裏。我知道這很簡單,但無法弄清楚問題所在。

編輯:

編輯查詢

select o.order_id, round(sum(p.price * p.quantity),2) order_total 
from order_details o 
inner join product_detail p 
on o.order_id = p.order_id 
group by o.order_id; 
+1

有一個括號太多,在選擇列表中使用別名不匹配用於表。並且order_id需要使用相應的表別名進行限定(由於解析器中存在錯誤,它在10g中工作,但會在11以後被拒絕) – 2013-05-03 12:18:08

回答

1

即使在更換表名作爲@a_horse_with_no_name建議,你有一些其他的問題,但奇怪的是他們都不會導致ORA -00979。不妨列出它們,雖然這並不意味着苛刻...

  • 您正在使用表別名ql但這是沒有定義;
  • 當你說列只是price你指的是unit_price列;
  • 你錯過了一個關閉),或者更明智的你有一個額外(之前ROUND; (我不確定ROUND是否有用 - 除非你的價格是便士/美分/小數);
  • 您在這兩個表格中都有一個名爲order_id的列,但您沒有指定在selectorder by中使用哪一個列。

隨着新的表名這部作品:

select o.order_id, round(sum(p.price * p.quantity),2) order_total 
from order_details o 
inner join product_detail p 
on o.order_id = p.order_id 
group by o.order_id; 

    ORDER_ID ORDER_TOTAL 
---------- ----------- 
     1   300 

如果ROUND是爲了使其顯示小數點後兩位,也不會;你需要使用TO_CHAR代替,也許:

select o.order_id, to_char(sum(p.price * p.quantity), '999G999D99') order_total 
... 

    ORDER_ID ORDER_TOTAL 
---------- ----------- 
     1  300.00 
+0

請參閱上面的編輯。我編輯了查詢並進行了更改。現在工作正常 – 2013-05-03 12:39:15