Sql 如何使用avg和sum同时计算多个子查询?
所以我有这个逻辑,我很难在我的查询中实现它。。 我想得到数据的平均值,但不包括帐户类型“EXAMPLE\u 1” 这是我现在的代码,因为我仍然在思考如何解决它 一, 这就是我打算用它做的2Sql 如何使用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 <> '
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