在子查询中使用主查询的字段别名

问题描述 投票:0回答:1

我想在子查询中使用主查询中的别名字段进行过滤:

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

有什么解决办法吗?

sql postgresql
1个回答
0
投票

我不知道实际的列类型,但我确实看到外部查询将原始

created_at
转换为
date
,然后给它一个
creation_date
别名。假设这最初是一个日期时间(或类似的),这意味着我们已经缩小了源列中值的范围。

然后,外部查询使用缩小列的别名执行

GROUP BY
,这意味着
GROUP BY
必须 分组到转换的 result,而不是与转换的源分组。

现在我们查看内部/嵌套查询,发现它正在尝试引用原始源列。但由于外部查询中的

GROUP BY
该列不再存在

数据库必须先解析分组,然后才能解析相关子查询。我知道您正在尝试进行相同的转换,以获得相同的值,但是对于这一点来说,这并不重要......从子查询的角度来看,原始的源列不再存在。

© www.soinside.com 2019 - 2024. All rights reserved.