PostgreSQL查询 - AVG()函数在临时表之外

3

我目前的代码大致如下:

SELECT num
  FROM (
        SELECT ... Code that returns the table I would expect ...
  ) table_name
WHERE num > (SELECT AVG(num) FROM table_name);

目前查询会出现错误:ERROR:关系“table_name”不存在。

为什么会发生这种情况呢?

正如我在代码中所说的那样,我可以从大括号内复制 select 语句:

SELECT ... Code that returns the table I would expect ...

它将返回一个表格,其中包含我期望的并且包含名为“num”的列。

另外,当我给一个表格命名时(在这种情况下是table_name),在SQL中它被称为什么?像我在标题中所称的那样是临时表吗?不知道它被称为什么,很难搜索到解决方案。

谢谢, 卡梅伦


有趣。我本来以为 table_name 在这里是可用的。 - Craig Ringer
2个回答

1
解释已排除,以下为英文内容的直接翻译:
一种解决你的问题的方法是使用 cte
with table_name as
(SELECT ... Code that returns the table I would expect ...)
,avg_num as (select avg(num) as avgnum from table_name)
select t.num 
from table_name t join avg_num a
on t.num > a.avgnum;

非常感谢!这个确实完美地运行了,只有一个小错误,就是你第三行开头的逗号不应该在那里。 - Cameron Probert

0

另一种解决方案是使用窗口函数:

SELECT num
FROM (SELECT num, AVG(num) OVER () as avgnum
      FROM . . .    Code that returns the table I would expect ...
     ) table_name
WHERE num > avgnum;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接