如何从子查询的标识符中选择

时间:2016-11-01 14:46:21

标签: sql oracle

为什么我无法从子查询的标识符中选择?

SELECT e.num_enc "Codigo Encomenda", e.data_enc "Data Encomenda", a.quantidade "Quantidade"
FROM encomendas e, (SELECT e.num_enc num_enc,SUM(i.quantidade) quantidade
                FROM itens i, encomendas e
                WHERE i.num_enc = e.num_enc AND EXTRACT(YEAR FROM e.data_enc)=2014
                GROUP BY e.num_enc) a,
               (SELECT AVG(b.quantidade) media
                FROM (SELECT SUM(i.quantidade) quantidade
                      FROM a) c #PROBLEM HERE
WHERE e.num_enc = a.num_enc AND a.quantidade>c.media;

1 个答案:

答案 0 :(得分:1)

不,您试图立即从内联视图/子查询中进行选择,这是无法完成的。您可以使用它JOIN访问外部查询(OR)中的子查询并获取数据。

出于您的目的,您可以考虑使用CTE(除非您使用MySQL)。

您可以将查询重写为

SELECT e.num_enc "Codigo Encomenda", 
e.data_enc "Data Encomenda", 
a.quantidade "Quantidade"
FROM encomendas e
JOIN (SELECT e.num_enc num_enc,SUM(i.quantidade) quantidade
                FROM itens i, encomendas e
                WHERE i.num_enc = e.num_enc AND EXTRACT(YEAR FROM e.data_enc)=2014
                GROUP BY e.num_enc) a ON e.num_enc = a.num_enc;

以下部分(出现错误)对我来说看起来不合逻辑,因为您试图从AVG()结果中获取SUM()

 (SELECT AVG(b.quantidade) media
            FROM (SELECT SUM(i.quantidade) quantidade
                  FROM a) c #PROBLEM HERE