我想在子查询中使用主查询中的别名字段进行过滤:
select a.created_at::date as creation_date, a.column as col1,
(select count(*)
from table b
where a.col1 = b.col1
and a.created_at::date = b.created_at::date) as count_one
from table a
group by creation_date, col1;
但这会产生错误
ERROR: subquery uses ungrouped column "a.created_at" from outer query
有什么解决办法吗?
我不知道实际的列类型,但我确实看到外部查询将原始
created_at
转换为 date
,然后给它一个 creation_date
别名。假设这最初是一个日期时间(或类似的),这意味着我们已经缩小了源列中值的范围。
然后,外部查询使用缩小列的别名执行
GROUP BY
,这意味着 GROUP BY
必须 分组到转换的 result,而不是与转换的源分组。
现在我们查看内部/嵌套查询,发现它正在尝试引用原始源列。但由于外部查询中的
GROUP BY
,该列不再存在。
数据库必须先解析分组,然后才能解析相关子查询。我知道您正在尝试进行相同的转换,以获得相同的值,但是对于这一点来说,这并不重要......从子查询的角度来看,原始的源列不再存在。