2013-05-03 108 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