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

解决查询中“Scalar subquery produced more than one element”报错问题

问题修复方案

你遇到的「Scalar subquery produced more than one element」错误,核心原因是子查询没有和主表关联:那个统计订单数的子查询直接对所有订单按仓库分组,会返回所有仓库的订单统计结果(多行数据),但主查询的每个仓库行只能对应一个单一的订单数值,因此触发报错。

下面给出两种可行的修复写法:

写法一:利用JOIN直接聚合(推荐)

既然已经关联了仓库表和订单表,直接通过聚合函数统计即可,同时解决你提到的「无法同时对warehouse_id和warehouse_alias分组」的问题:

SELECT
  CONCAT(warehouse.warehouse_id, warehouse.warehouse_alias) AS warehouse_name,
  COUNT(orders.order_id) AS total_orders  -- 用订单ID计数更精准,避免重复统计
FROM
  focused-mote-392209.warehouse_orders.warehouse AS warehouse
INNER JOIN
  focused-mote-392209.warehouse_orders.orders AS orders 
  ON warehouse.warehouse_id = orders.warehouse_id
GROUP BY
  warehouse.warehouse_id, warehouse.warehouse_alias  -- 直接分组原始字段,比CONCAT更可靠,避免不同仓库出现相同warehouse_name

BigQuery允许在SELECT中使用原始字段的拼接结果,只要GROUP BY里包含这些原始字段即可,不需要只分组拼接后的字符串。

写法二:关联子查询

如果坚持用子查询,必须让子查询和主表的仓库ID关联,确保每个仓库只返回自己的订单数:

SELECT
  CONCAT(warehouse.warehouse_id, warehouse.warehouse_alias) AS warehouse_name,
  (SELECT COUNT(*) 
   FROM focused-mote-392209.warehouse_orders.orders AS o
   WHERE o.warehouse_id = warehouse.warehouse_id) AS total_orders
FROM
  focused-mote-392209.warehouse_orders.warehouse AS warehouse
-- 若要排除无订单的仓库,可添加以下条件
WHERE EXISTS (
  SELECT 1 FROM focused-mote-392209.warehouse_orders.orders AS o
  WHERE o.warehouse_id = warehouse.warehouse_id
)

内容的提问来源于stack exchange,提问作者Fahrettin Gazi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:25:03