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

如何修正SQL代码以统计美国客户订单中非洲供应商提供的订单项

修正后的SQL代码及说明

原代码用UNION合并两个独立查询的结果,得到的是美国客户订单项或非洲供应商订单项的总数,而非同时满足两个条件的交集结果。以下是修正后的代码:

SELECT COUNT(lineitem.l_orderkey) AS counts
FROM lineitem
-- 关联订单与美国客户信息
INNER JOIN orders ON lineitem.l_orderkey = orders.o_orderkey
INNER JOIN customer ON orders.o_custkey = customer.c_custkey
INNER JOIN nation cust_nation ON customer.c_nationkey = cust_nation.n_nationkey
-- 关联供应商与非洲区域信息
INNER JOIN supplier ON lineitem.l_suppkey = supplier.s_suppkey
INNER JOIN nation supp_nation ON supplier.s_nationkey = supp_nation.n_nationkey
INNER JOIN region ON supp_nation.n_regionkey = region.r_regionkey
-- 同时过滤双条件
WHERE cust_nation.n_name = 'UNITED STATES'
  AND region.r_name = 'AFRICA';

修正思路

  1. 一次性关联所有必要表:同时关联客户侧(lineitem→orders→customer→nation)和供应商侧(lineitem→supplier→nation→region)的表,确保能同时获取客户国家和供应商区域信息
  2. 用AND实现逻辑与过滤:在同一个WHERE子句中加入两个条件,确保只有同时满足「美国客户下单」和「非洲供应商供货」的订单项才会被统计
  3. 可选优化:如果需要统计唯一订单数而非订单项总数,可将COUNT(lineitem.l_orderkey)替换为COUNT(DISTINCT lineitem.l_orderkey)

原代码问题说明

原代码的UNION会将两个查询的结果求和,本质是统计「美国客户所有订单项」加「非洲供应商所有订单项」,实现的是逻辑或的关系,而非需求中的逻辑与,因此无法得到符合要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:10:44