Select 中的 GROUP BY 和子查询

GROUP BY and subquery in Select

所以我遇到的问题是我不确定为什么这个问题的答案是否定的。

Project(pid,name,startYear) Developer(did,name,hireYear) WorksOn(pid,did,year) 作为架构。

据我了解,在第 7 季度中,它 select 所有 x.did 连同年份大于 2010 的计数,然后按 X.did 分组。 对于 Q8,它应该 select 所有具有 x.did 且年份 > 2010 的 x.did 的计数以及 x.did.

我不完全理解为什么这些查询不同,如果能帮助理解它,我将不胜感激!

好吧,第一个只选择年份大于 2010 年的行。第二个只检索所有行,无论年份如何。对于年份小于或等于 2010 年的所有行,计数将为 0。在第一个中,GROUP BY 也有效果,在结果中 did 是唯一的。在第二个中,情况不一定如此。如果 did 在 table 中不是唯一的,那么它在结果中也不是唯一的。

他们根本不相似。

  • 第二个选择table中的所有行;第一个只选择符合 where 条件的行。
  • 第二个选择所有行,即使在 X.did 上有重复项也是如此。第一个只为每个 X.did.
  • 选择一行
  • 第一列永远不会 return 第二列的值为零;第二个遗嘱。

在非常狭窄的情况下,两个 return 相同的结果集。您应该考虑哪些数据可以实现这一点。