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 相同的结果集。您应该考虑哪些数据可以实现这一点。
所以我遇到的问题是我不确定为什么这个问题的答案是否定的。
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 相同的结果集。您应该考虑哪些数据可以实现这一点。