“分组依据”无法正常工作

时间:2013-05-03 11:55:32

标签: sql oracle10g group-by

我有一个名为'ORDER_DETAILS'的表

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 个答案:

答案 0 :(得分:1)

即使使用@a_horse_with_no_name推荐的替换表名,您还有许多其他问题,但奇怪的是它们都不会导致ORA-00979。不妨列出它们,虽然这并不是很苛刻......

  • 您正在使用表别名ql,但未定义;
  • 当您说该列只是unit_price时,您指的是列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