2012-12-19 70 views
1

表:主键已经凸显AS子句中的Oracle 11g XE

  1. 客户(CUSTOMER_ID,f_name,l_name,tel_no,地址,网卡,市)
  2. 产品(PRODUCT_ID,名称,说明,价格,sales_tax)
  3. 分支(branch_id,名称,tel_no,地址,市)
  4. 订单(ORDER_ID,CUSTOMER_ID,order_date的,branch_id)
  5. order_product(的order_id,product_id,数量)

这是我的查询的一个非常简化的版本:

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 

我想存储的结果集,所以我可以用它在上面的查询子query.The的上层Oracle SQL Developer中不运行。

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

我不想使用临时表。我已经尝试过使用AS子句,查询需要很长时间才能执行,如超过20分钟。我不知道为什么

回答

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量=平均的总和?

+0

谢谢,简化表单更易于阅读。数量总和不是平均值,顶级查询显示customer_id的数量大于平均数量的客户数量,因此我将其命名为使其更容易。 **我现在需要的是oracle中的“AS”子句,所以我可以存储临时生成的结果集。如果您有任何关于此事的信息,我将非常感激。** – hasnain095

+0

@ user1859596我提出的解决方案删除了​​子查询,因此不确定为什么您仍然朝着这个方向看。在Oracle中,存储结果集的方式是WITH子句(因子分解查询),但在这种情况下不需要,因为我们不会重复使用结果集。你可以,如果你打算重复多次查询的结果作为一个更大的SQL的一部分,使用'与res作为(我的查询上面)select..from res a,res b等...' – DazzaL

相关问题