![]() |
1
5
你应该能够一次性得到你需要的一切:
事情 不会起作用的 直接从上面的查询(它有无意义的组合聚合和其他错误);现在是检查公式的好时机 如果决定执行子查询确实简化了公式,则:
|
![]() |
2
1
这个问题比你的概括要难一点。我要声明如下:
您有一部分数据(受条件限制),这些数据被分组并为每个组进行聚合。然后,将聚合合并为单个值,并希望将该值的函数再次应用于每个组。显然,在分组子查询的结果可以作为实体引用之前,不能重用该条件。
在mssql和oracle中,您可以使用
UPD :很抱歉,我现在无法发布就绪代码(明天可以),但我有一个想法:
您可以将需要在子查询中输出的数据与
外部查询中的条件将是
UPD : 下面是使用group concat将所需数据传递给外部联接的版本。
我的评论以
|
![]() |
3
0
由于问题中的sql被大量挂起(现在只显示相关部分),这里是我的新答案 假设:条件实际上是相同的,子查询和外部查询之间不会出现复杂的列别名。 回答: 可以删除外部查询中的where。
这应该会给你同样的结果。 (还要注意,您可以删除内部的where并保留外部的where-结果应该相同,但是性能可能不一样)。 最后, 重复where子句可能对性能没有太大影响 -与任何i/o相比,计算额外条件(甚至是sqrt等表达式)非常便宜(而且这些条件不在任何新列上操作,因此所有i/o都已完成) 此外,内部查询和外部查询使用相同的group by,外部查询从子查询获取所有数据。 这使得外部查询中的任何聚合函数都是多余的(作为外部查询源的子查询中的行已经按年份分组)。 这使得整个子选择是多余的。 |
![]() |
4
0
你能在你的情况下使用临时桌子吗?尽管它仍然要求您使用where子句两次,但它应该会大大提高您的性能。
希望这有帮助! ——配音 |
|
tggtsed · PostgreSQL从平均值中排除值 1 年前 |
![]() |
Dawid · 为什么我不能在子查询中使用表别名? 2 年前 |
![]() |
CraZyCoDer · 在PostgreSQL中锁定潜在事务 2 年前 |
![]() |
ranebec · 计数时如何返回0而不是null? 2 年前 |
![]() |
Flo · 分组依据中的SQL大小写 2 年前 |