sql >> データベース >  >> RDS >> Oracle

SQLがOracleSQLおよびInnerQueryエラーのあるGROUPBY式ではない

    ORACLEドキュメント にあるように

    これは、o.CUSTOMER_IDでのみグループ化する場合を意味します 、選択リストの他のすべてのフィールドは、集計関数(COUNT、MAXなど)である必要があります。

    各グループで(名前と名前として)値を繰り返すフィールドの場合は、GORUPBY句に含める必要があります。

    費やした金額を含めるには、PRODUCTSで別のLEFT JOINを追加し、SUM(op.amount*p.price)を選択します。 サブクエリなし。

    それは

    SELECT o.CUSTOMER_ID AS "ID", c.name AS "Name", c.SURNAME AS "Surname",
           SUM(op.AMOUNT*p.PRICE) AS "Money spent"
      FROM ORDERS o 
           LEFT JOIN CUSTOMERS c ON c.ID = o.CUSTOMER_ID 
           LEFT JOIN ORDERS_PRODUCTS op ON op.ORDER_ID = o.id
           LEFT JOIN PRODUCTS p ON p.id = op.PRODUCT_ID
     GROUP BY o.CUSTOMER_ID, c.name AS "Name", c.SURNAME
     ORDER BY o.CUSTOMER_ID, c.name AS "Name", c.SURNAME;
    

    クエリの並べ替え順序は常に定義することを忘れないでください。そうしないと、未定義になります。




    1. Javaでバイト配列をBlobに変換する最も簡単な方法

    2. マルチクラウドデータベースでのPostgreSQLスプリットブレインの排除

    3. MariaDBで日付に月を追加する6つの方法

    4. 2つの値のみを受け入れるように列を制限する