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

为什么包含GROUP BY子句的SQL查询返回的结果数量更多?

两段SQL结果数量差异的核心原因

1. 第二段SQL存在逻辑错误:缺少表关联条件

你在第二段SQL中使用了FROM Customers, Orders的隐式连接写法,但没有添加Customers.CustomerID = Orders.CustomerID的关联条件,会直接生成笛卡尔积(交叉连接):只要Orders表存在1998年的订单,所有Customers表的联系人都会和这些订单匹配出有效行,最终返回的是所有在库的联系人姓名,而不是「1998年有下单的联系人」。你反馈的81和91的差值,刚好就是1998年没有下单的联系人数量。

2. 额外潜在逻辑差异补充

如果补全关联条件后结果仍有差异,还需要注意以下情况:

  • 若存在多个不同客户的ContactName完全重名的情况:两段SQL的DISTINCT都会对重名的联系人做合并,逻辑是一致的,不会产生差值。
  • 第二段SQL中写的DATEPART(YEAR,Orders.OrderDate)输出字段、GROUP BY Orders.OrderDate属于冗余逻辑,因为HAVING已经筛选了年份为1998,所有行的年份返回值都是1998,DISTINCT最终只对ContactName生效。

修正后的第二段SQL写法(和第一段逻辑完全等价)

SELECT DISTINCT Customers.ContactName
FROM Customers 
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE DATEPART(YEAR, Orders.OrderDate) = 1998

修正后执行返回的结果数就会和第一段SQL一致,都是81条。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:15:00