0

「ORDER_DETAILS」というテーブルがあります

ここに画像の説明を入力

そして、PRODUCT_DETAIL というテーブル ここに画像の説明を入力

のようなデータを取得したい

ここに画像の説明を入力

Order_total は (Quantity*price) の合計になります -> (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;
4

1 に答える 1

1

@a_horse_with_no_nameが推奨するようにテーブル名を置き換えても、他にも多くの問題がありますが、奇妙なことに、どれもORA-00979につながることはありません。これは厳しいことを意図したものではありませんが、それらをリストすることもできます...

  • テーブル エイリアスを使用していますqlが、それは定義されていません。
  • unit_price列がちょうどであると言われているときは、列を参照していますprice
  • 締めくくりが欠けている)か、より賢明な前に余分 なものがあります。(有用かどうかはわかりません。価格がペンス/セントなどの分数でない限り、あまり役に立ちません);(ROUNDROUND
  • order_id両方のテーブルで呼び出された列がありますが、selectまたは でどちらを使用するかを指定していませんorder 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が小数点以下 2 桁を表示するように意図されていた場合は、表示されません。TO_CHARおそらく、代わりに使用する必要があります:

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

  ORDER_ID ORDER_TOTAL
---------- -----------
         1      300.00
于 2013-05-03T12:15:42.430 に答える