如何使用 avg 和 sum 进行多个子查询也算?

How to multiple subquery with avg and sum also count?

所以我有这个逻辑,但我很难将它实现到我的查询中.. 我想获得数据的平均值但不包括 ACCOUNT_TYPE 'EXAMPLE_1' 这是我现在的代码,因为我还在想如何弄清楚 (1)

SELECT 
ACCOUNT_TYPE
,ROUND(avg(MARKET_PRICE),4) AS MARKET_PRICE--i intended to change it with number (2)
,sum(QUANTITY) AS QUANTITY--i intended to change it with number (2)
FROM TABLE_A

这就是我打算用它做的(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 个具有账户类型 example_1,另外 2 个具有账户类型 example_3 和 example_4。 所以有 4 个数据,但我想排除 example_1 ,所以只有 2 个数据可以做我的平均值。所以 (market_price example_3+market_price example_4)/((count_data 账户类型 <>example_1 )-(count_data 账户类型 = example_1)).

我的求和也是如此,我想对所有数据求和,但不包括 example_1 数据。 问题是我需要 select 所有帐户类型,这就是为什么我不能在 FROM TABLE_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

您可以按如下方式使用条件聚合:

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