如何修正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';
修正思路
- 一次性关联所有必要表:同时关联客户侧(lineitem→orders→customer→nation)和供应商侧(lineitem→supplier→nation→region)的表,确保能同时获取客户国家和供应商区域信息
- 用AND实现逻辑与过滤:在同一个WHERE子句中加入两个条件,确保只有同时满足「美国客户下单」和「非洲供应商供货」的订单项才会被统计
- 可选优化:如果需要统计唯一订单数而非订单项总数,可将
COUNT(lineitem.l_orderkey)替换为COUNT(DISTINCT lineitem.l_orderkey)
原代码问题说明
原代码的UNION会将两个查询的结果求和,本质是统计「美国客户所有订单项」加「非洲供应商所有订单项」,实现的是逻辑或的关系,而非需求中的逻辑与,因此无法得到符合要求的结果。
内容的提问来源于stack exchange,提问作者oldsix
相关产品推荐
相关产品推荐

