1

表:主キーが強調表示されています

  1. customer(customer_id、f_name、l_name、tel_no、addr、nic、city)
  2. product(product_id、name、description、price、sales_tax)
  3. branch(branch_id、name、tel_no、addr、city)
  4. orders(order_id、customer_id、order_date、branch_id)
  5. order_product(order_id、product_id、quantity)

これは私のクエリの非常に単純化されたバージョンです:

SELECT customer_id, SUM(quantity) AS avg_quantity
FROM orders,order_product
WHERE orders.order_id = order_product.order_id
GROUP BY customer_id
HAVING SUM(quantity) > (SELECT AVG(no_quantity)
FROM(
  SELECT customer_id, SUM(quantity) AS no_quantity
  FROM orders,order_product
  WHERE orders.order_id = order_product.order_id
  GROUP BY customer_id))

2つのサブクエリがあります。クエリの実行中に結果セットを一時的に保存したいと思います。私はこれを行うSQLの例を見てきました:

(SELECT * FROM orders WHERE branch_id = 4) AS tempone

結果セットを保存して、サブクエリの上位レベルで使用できるようにします。上記のクエリは、OracleSQLDeveloperでは実行されません。

ERROR : ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"

一時テーブルは使いたくない。すでにWITHAS句を試しましたが、20分以上かかるように、クエリの実行に時間がかかりすぎます。どうしてか分かりません

4

1 に答える 1

0

これを次のように単純化できるはずです。

select customer_id, avg_quantity
  from (select customer_id,
               sum(quantity) as avg_quantity,
               avg(sum(quantity)) over () global_avg_quantity
          from orders,
               order_product
         where orders.order_id = order_product.order_id
         group by customer_id)
 where avg_quantity > global_avg_quantity;

SUM(quantity) AS avg_quantity しかし、数量の合計 = 平均を入れているのがわかりますか?

于 2012-12-19T14:57:12.310 に答える