postgres在with子句中输出查询

时间:2013-05-10 13:23:15

标签: postgresql

我正在尝试将最终查询的with子句中的查询输出作为csv或某种文本文件。我只有查询权限,我不允许为这个数据库创建表。我有一组查询对数据集进行一些计算,另一组查询在前一组上计算,另一组在最终集上计算。我不想将所有这些作为三个单独的查询运行,因为前两个的结果实际上是在最后一个。

WITH
    Q1 AS(
        SELECT col1, col2, col3, col4, col5, col6, col7
        FROM table1
    ),
    Q2 AS(
        SELECT AVG(col1) as col1Avg, MAX(col1) as col1Max, col2, col3,col4
        FROm Q1
        GROUP BY col2, col3, col4
    )
SELECT 
    AVG(col1AVG), col3
FROM
    Q2
GROUP BY col3

我希望Q1,Q2和最终选择语句的结果最好是3个csv文件,但我可以在一个csv文件中使用它。这可能吗?

谢谢!

编辑:只是为了澄清,查询中的列非常不同。我肯定从我的第一个查询中删除了比我的第二个更多的列。我已经编辑了上面的代码,以使其更清晰。

1 个答案:

答案 0 :(得分:1)

要将所有结果组合在一起,您可以使用UNION ALL,但列的数量和数据类型必须匹配。

select col1, col2, col2
from   blah
union all
select col1, col2, col2
from   blah2
union all
... etc

你当然可以在那里引用CTE ......

with
  cte_1 as (
    select ... from ...),
  cte_2 as (
    select ... from ... cte_1),
  cte_3 as (
    select ... from ... cte_2)
select col1, col2, col2
from   cte_1
union all
select col1, col2, col2
from   cte_2
union all
select col1, col2, col2
from   cte_3

如果您的最终输出是csv,那么看起来你有多种行格式 - 校验和?如果是这样,在您将所有列合并在一起的查询中,您可能希望将每个查询中的所有列合并为一个字符串...

with
  cte_1 as (
    select ... from ...),
  cte_2 as (
    select ... from ... cte_1),
  cte_3 as (
    select ... from ... cte_2)
select col1||','||col2||','||col2
from   cte_1
union all
select col1||','||col2
from   cte_2
union all
select col1
from   cte_3
相关问题