我得到的答案(4434.21)与假设的结果(4721.14)不同(并且无法弄清楚出了什么问题,问题如下:
问:以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
En..两个查询都不同。第一个查询获取满足连接条件的订单的 o.total_amt_usd 的平均值。第二个查询获取满足某些条件的订单的平均值 o.total_amt_usd 的平均值。如果您使用 SELECT AVG(t2.account_avg) 您可能会得到相同的结果 FROM 订单 o 加入t2 ON t2.account_id = o.account_id。