如何使用 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
所以我有这个逻辑,但我很难将它实现到我的查询中.. 我想获得数据的平均值但不包括 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