Sql 如何使用avg和sum同时计算多个子查询?

Sql 如何使用avg和sum同时计算多个子查询?,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,所以我有这个逻辑,我很难在我的查询中实现它。。 我想得到数据的平均值,但不包括帐户类型“EXAMPLE\u 1” 这是我现在的代码,因为我仍然在思考如何解决它 一, 这就是我打算用它做的2 CASE WHEN ACCOUNT_TYPE <> 'EXAMPLE_1' THEN ROUND(MARKET_PRICE/(SUBQUERY_B-SUBQUERY_A),4) AS MARKET_PRICE ELSE NULL CASE WHEN ACCOUNT_TYPE <> '

所以我有这个逻辑,我很难在我的查询中实现它。。 我想得到数据的平均值,但不包括帐户类型“EXAMPLE\u 1” 这是我现在的代码,因为我仍然在思考如何解决它 一,

这就是我打算用它做的2

CASE WHEN ACCOUNT_TYPE <> 'EXAMPLE_1'
THEN ROUND(MARKET_PRICE/(SUBQUERY_B-SUBQUERY_A),4) AS MARKET_PRICE
ELSE NULL

CASE WHEN ACCOUNT_TYPE <> 'EXAMPLE_1'
THEN (SUBQUERY_C) AS QUANTITY
ELSE NULL
这是我需要在查询中实现的子查询

--THIS IS SUBQUERY_A
SELECT COUNT(*) FROM 
TABLE A WHERE ACCOUNT_TYPE <> 'EXAMPLE_1'

--THIS IS SUBQUERY_B
SELECT COUNT(*) FROM 
TABLE A WHERE ACCOUNT_TYPE = 'EXAMPLE_1'

--THIS IS SUBQUERY_C
SELECT SUM(QUANTITY) FROM TABLE_A WHERE ACCOUNT_TYPE <> 'EXAMPLE_1' 
我希望我的解释很清楚,因为我不知道如何用英语更好地表达: 所以,首先,我想从市场价格中得到一个平均值。假设市场价格有4个数据,2个有账户类型示例_1,另外2个有账户类型示例_3和示例_4。 所以有4个数据,但我想排除示例_1,所以只有2个数据可以进行平均。因此,市场价格示例3+市场价格示例4/计数数据账户类型示例1-计数数据账户类型=示例1

我的求和也是一样,我想求和所有数据,但不包括示例_1数据。 问题是我需要选择所有帐户类型,这就是为什么我不能使用表A底部的where条件


也许有人能帮忙

不确定这是否会编译,但是,我认为您正在尝试从子查询中调出聚合,并将它们与作为输出的详细数据混合在一起

SELECT 
    ACCOUNT_TYPE,
    CASE WHEN ACCOUNT_TYPE <> 'EXAMPLE_1' THEN ROUND(MARKET_PRICE/(SUBQUERY_B - SUBQUERY_A),4) ELSE NULL END AS MARKET_PRICE,
    CASE WHEN ACCOUNT_TYPE <> 'EXAMPLE_1' THEN SUBQUERY_C AS QUANTITY ELSE NULL
FROM
    TABLE_A A
    INNER JOIN 
    (
        SELECT 
            ACCOUNT_Type,
            SUBQUERY_A = SUM(CASE WHEN ACCOUNT_Type <> 'EXAMPLE_1' THEN 1 ELSE 0),
            SUBQUERY_B = SUM(CASE WHEN ACCOUNT_Type = 'EXAMPLE_1' THEN 1 ELSE 0),
            SUBQUERY_C = SUM(CASE WHEN ACCOUNT_Type = 'EXAMPLE_1' THEN QUANTITY ELSE NULL END) 
        TABLE A
        GROUP BY
            ACCOUNT_Type
    )AS Detail ON Detail.ACCOUNT_Type = A.ACCOUNT_Type

不确定这是否会编译,但是,我认为您正在尝试从子查询中调出聚合,并将它们与作为输出的详细数据混合在一起

SELECT 
    ACCOUNT_TYPE,
    CASE WHEN ACCOUNT_TYPE <> 'EXAMPLE_1' THEN ROUND(MARKET_PRICE/(SUBQUERY_B - SUBQUERY_A),4) ELSE NULL END AS MARKET_PRICE,
    CASE WHEN ACCOUNT_TYPE <> 'EXAMPLE_1' THEN SUBQUERY_C AS QUANTITY ELSE NULL
FROM
    TABLE_A A
    INNER JOIN 
    (
        SELECT 
            ACCOUNT_Type,
            SUBQUERY_A = SUM(CASE WHEN ACCOUNT_Type <> 'EXAMPLE_1' THEN 1 ELSE 0),
            SUBQUERY_B = SUM(CASE WHEN ACCOUNT_Type = 'EXAMPLE_1' THEN 1 ELSE 0),
            SUBQUERY_C = SUM(CASE WHEN ACCOUNT_Type = 'EXAMPLE_1' THEN QUANTITY ELSE NULL END) 
        TABLE A
        GROUP BY
            ACCOUNT_Type
    )AS Detail ON Detail.ACCOUNT_Type = A.ACCOUNT_Type

您可以使用条件聚合,如下所示:

Sum(case when ACCOUNT_Type <> 'EXAMPLE_1' then market_price end)
/ sum (case when ACCOUNT_Type <> 'EXAMPLE_1' then 1 end) as avg_market_price

您可以使用条件聚合,如下所示:

Sum(case when ACCOUNT_Type <> 'EXAMPLE_1' then market_price end)
/ sum (case when ACCOUNT_Type <> 'EXAMPLE_1' then 1 end) as avg_market_price