根据聚合函数结果连接表

时间:2017-09-21 11:30:32

标签: sql oracle oracle12c

我有一个小问题,根据SUM()的结果加入两个表。以下是我的表格。

Customers Table  

CUSTOMERID      NAME AGE   ADDRESS       PHONE
        1        AA  33    Some Address  123654789
        2        BB  35    Some Address  123654789
        3        CC  55    Some Address  987654789
        4        DD  55    Some Address  987654789
        5        EE  25    Some Address  365754789
        6        FF  20    Some Address  365754789


Orders Table 

    ORDERID  CUSTOMERID ORDERAMOUNT
    C12335    3         50000
    F12336    3         12000
    C12337    3         5000
    C12338    1         3700
    C12339    2         1100

我显示customerID,Name,AddressORDERAMOUNT总和超过50000的客户的订单总和。

但是,由于我不能在SUM()子句之后使用像WHERE这样的聚合函数,所以我在这里遇到了麻烦。

SELECT C.NAME,C.ADDRESS,O.CUSTOMERID
FROM CUSTOMERS C
INNER JOIN
(
    SELECT CUSTOMERID,SUM(ORDERAMOUNT) FROM ORDERS GROUP BY CUSTOMERID
)O ON C.CUSTOMERID = O.CUSTOMERID;

我可以编写的最先进的工作查询是这个并且它不会评估ORDERAMOUNT的Sum的条件超过50000。

有没有办法可以评估这个条件?非常感谢帮助。在此先感谢:)

1 个答案:

答案 0 :(得分:4)

您可以在没有子查询的单个查询中执行此操作:

select c.name, c.address, c.customerid, sum(o.orderamount)
from customers c join
     orders o
     on o.customerid = c.customerid
group by c.name, c.address, c.customerid
having sum(o.orderamount) > 50000;

havingwhere类似,只是在聚合后过滤。您可以在having子句中使用聚合函数。