You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery中SQL报错‘Each function argument is an expression, not a query’解析与修复

错误含义与解决方案

错误含义

这个报错的核心是:你给MAX()函数传了一个返回多行结果的查询,但MAX()只能接收单个表达式,或者返回单行单列的标量子查询。你的子查询SELECT AVG(quantity) FROM \farmers_market.customer_purchases` GROUP BY customer_id会输出每一位客户的平均购买量,是多行数据,没法直接作为MAX()`的参数,所以BigQuery抛出了这个错误。

针对不同需求的解决方案

以下分两种常见需求场景给出解决代码:

场景1:筛选自身最大购买量大于自身平均购买量的客户

如果要找「某客户的单笔最大购买数量」超过「该客户所有购买记录平均数量」的客户,直接在分组后计算对应聚合值即可:

SELECT customer_id 
FROM customer_purchases
GROUP BY customer_id
HAVING MAX(quantity) > AVG(quantity)
ORDER BY customer_id

场景2:筛选最大购买量大于所有客户平均购买量的客户

如果要找「客户的最大购买数量」超过「所有客户各自平均购买量的整体平均值」,需要先嵌套子查询算出这个整体均值,再做比较:

SELECT customer_id 
FROM customer_purchases
GROUP BY customer_id
HAVING MAX(quantity) > (
  SELECT AVG(customer_avg)
  FROM (
    SELECT AVG(quantity) AS customer_avg
    FROM `farmers_market.customer_purchases`
    GROUP BY customer_id
  )
)
ORDER BY customer_id

如果你的需求是「客户的最大购买量超过所有购买记录的整体平均」(不区分客户,直接计算所有quantity的平均值),代码更简洁:

SELECT customer_id 
FROM customer_purchases
GROUP BY customer_id
HAVING MAX(quantity) > (SELECT AVG(quantity) FROM `farmers_market.customer_purchases`)
ORDER BY customer_id

内容的提问来源于stack exchange,提问作者Dharminder Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:52:18