2016-12-09 24 views
-1

私はSQLを初めて使用しています。誰も私が "グループ化"式がこのSQLクエリで動作していない理由を理解するのに役立つでしょうか?私が使用していたコードがグループ式は、このSQLクエリでは動作しませんか?

CREATE OR REPLACE VIEW CUSTOMER_LINE_ITEM AS 
SELECT CUSTOMER_ORDER_CART_INFO.loginName,CUSTOMER_ORDER_CART_INFO.FirstName, 
CUSTOMER_ORDER_CART_INFO.LastName,CUSTOMER_ORDER_CART_INFO.orderCartID,(lineItems.orderPrice*lineItems.qtyOrdered) AS TOTAL_ORDER 
FROM CUSTOMER_ORDER_CART_INFO 
INNER JOIN lineItems 
ON CUSTOMER_ORDER_CART_INFO.orderCartID = lineItems.orderCartID 
GROUP BY CUSTOMER_ORDER_CART_INFO.loginName,CUSTOMER_ORDER_CART_INFO.FirstName, 
CUSTOMER_ORDER_CART_INFO.LastName,CUSTOMER_ORDER_CART_INFO.orderCartID 
ORDER BY orderCartID; 

グループがなければ、私は、このビューを生成することで表現され

ERROR at line 3: 
ORA-00979: not a GROUP BY expression 

このエラーが発生します。私は、表現によるグループは重複を削除し、異なる注文カートIDで結果を私に与えるべきだと思います。誰でも私がここで間違っていることを理解するのを助けることができますか? VIEW of CUSTOMER_LINE_ITEM without 'group by'

+0

GROUP BY式にTOTAL_ORDERを追加することをお勧めします。このエラーは、選択リストのすべての列がグループ式でもありませんが、試したわけではないことを示していると思います。 – Dilettant

+0

[検索](http://stackoverflow.com/search?q=oracle+not+a+group+by)を試しましたか? – Aleksej

+1

[ORA-00979の式によるグループではない]の重複の可能性があります(http://stackoverflow.com/questions/1520608/ora-00979-not-a-group-by-expression) – Aleksej

答えて

0

エラーはgroup by句にあります。単純な経験則を覚えておいてください。すべての列がgroup by句になるように選択されているか、またはgroup by句の一部ではない選択される列は、MAX、MIN、SUM、AVGなどの集約関数として選択されます。

問題なく実行される次のクエリを試してみてください。しかし、私はあなたの要件に基づいて把握する必要がある論理的な正しさを言うことができません。

CREATE OR REPLACE VIEW customer_line_item AS 
    SELECT cac.loginName, 
      cac.FirstName, 
      cac.LastName, 
      cac.orderCartID, 
      (SUM(li.orderPrice) * SUM(li.qtyOrdered)) AS TOTAL_ORDER 
     FROM customer_order_cart_info cac 
    INNER JOIN lineItems li 
     ON cac.orderCartID = li.orderCartID 
    GROUP BY cac.loginName, 
       cac.FirstName, 
       cac.LastName, 
       cac.orderCartID 
    ORDER BY cac.orderCartID; 

は、今ここで注意すべきことは、li.orderPriceとli.qtyOrderedは、選択したが、グループ内でも、集計関数でもないでしたされていましたさ。 group byを使用すると、group by句の列を使用してデータを論理的にグループ化します。ここでは、データはloginName、firstname、lastname、ordercartidでグループ化されています。しかし、各グループに対して複数のorderpriceとqtyが存在する可能性があり、SQLはグループ化ロジックを正当化できません。あなたの質問では、私が考えることができる1つの要件は、あなたは彼のカート内の顧客のための注文の合計価値を見出したいと思っていました。したがって、orderPriceにqtyOrderedを掛けています。これを実現するには、各lineItemのorderPriceとorderqtyを掛ける必要があります。したがって、必要なのは、lineItem(lineItemID/lineItemNo、ちょうど推測)による(orderPrice * orderQty)グループの合計です。これについては、私にいくつかの時間を与えてください、私は例を考案させて、私はそれで私の答えを編集します。それまでは、上記のようなことを試してみてください。

+0

私は遅すぎると思います。いずれかの方法 :) –

1

エラーメッセージの原因は、(lineItems.orderPrice*lineItems.qtyOrdered)を集約していないことです。

オラクルdocumentationは、集約または列をグループ化 だけ含まれている必要があり、GROUP BY句との選択式で

選択項目を教えてくれる。

つまり、たとえばTOTAL_ORDERを集計する必要があります。

sum(lineItems.orderPrice*lineItems.qtyOrdered) 

などです。

+1

ありがとう..それは働いた!何が間違っているのか分かります。 –

関連する問題