为什么我的子查询逻辑给出了不同的结果?

问题描述 投票:0回答:1

我得到的答案(4434.21)与假设的结果(4721.14)不同(ERD并且无法弄清楚出了什么问题,问题如下:

问:以total_amt_usd 计算的生命周期平均花费金额是多少,仅包括每个订单平均花费高于所有订单平均值的公司。

WITH t1 AS (SELECT AVG(o.total_amt_usd) total_avg
FROM orders o),

t2 AS(SELECT a.name account_name,
       a.id account_id,
       AVG(o.total_amt_usd) account_avg
FROM accounts a
JOIN orders o
  ON a.id = o.account_id
GROUP BY 1,2
HAVING AVG(o.total_amt_usd) > (SELECT * 
                              FROM t1)
)

SELECT AVG(o.total_amt_usd) 
FROM orders o
JOIN t2 
  ON t2.account_id = o.account_id

解决方案:

SELECT AVG(avg_amt)
FROM (
    SELECT o.account_id,
           AVG(o.total_amt_usd) avg_amt
    FROM orders o 
        GROUP BY 1
        HAVING AVG(o.total_amt_usd) > 
        (SELECT AVG(o.total_amt_usd) avg_all
        FROM orders o)
) t1
database postgresql analysis
1个回答
0
投票

En..两个查询都不同。第一个查询获取满足连接条件的订单的 o.total_amt_usd 的平均值。第二个查询获取满足某些条件的订单的平均值 o.total_amt_usd 的平均值。如果您使用 SELECT AVG(t2.account_avg) 您可能会得到相同的结果 FROM 订单 o 加入t2 ON t2.account_id = o.account_id。

© www.soinside.com 2019 - 2024. All rights reserved.