如何一起使用INTO和GROUP BY子句

时间:2017-11-14 06:25:31

标签: sql postgresql postgresql-9.4

SELECT cast ( SUBSTRING ( CAST ("ProcessingDate" AS text), 5, 2 ) as integer), 
    COUNT(*) INTO resultValue1,resultValue2
FROM "DemoLogs"."Project" 
WHERE "Addr" = 'Y' AND "ProcessingDate" >= 20160110 
GROUP BY 1 
ORDER BY 1;

在我的数据库中,ProcessingDate存储为 YYYYMMDD 。所以,我从中提取它的月份。

如果我们删除INTO子句,此查询工作正常但是,我想存储结果以进一步使用它。

那么变量resultValue1resultValue2的数据类型应该是如何存储数据的(因为数据将是多个)。

由于我是PostgreSQL的新手,我不知道如何做到这一点,任何人都可以帮助我。

3 个答案:

答案 0 :(得分:1)

此处resultValue1& resultValue2将是表而不是变量。您可以使用列名进行分组。

使用它们为列和组提供一些列别名。

你可能想要这个。

SELECT cast ( SUBSTRING ( cast ("ProcessingDate" as text),5 , 2 ) as 
integer) AS resultValue1, COUNT(*) AS resultValue2  
INTO <NewTable>  --NewTable will be created with those two columns
FROM "DemoLogs"."Project" 
-- conditions
Group By 1
-- other contitions/clauses
;

请参阅此INTO Documentation

希望这有帮助。

答案 1 :(得分:0)

试试这个:

SELECT cast ( SUBSTRING ( cast ("ProcessingDate" as text),5 , 2 ) as integer)resultValue1, 
    COUNT(*)resultValue2  
INTO <Table Name> 
FROM "DemoLogs"."Project" 
WHERE "Addr" = 'Y' 
AND "ProcessingDate" >= '20160110'
Group By 1 
Order By 1;

答案 2 :(得分:0)

将上述query存储在变量中,并从中删除INTO子句。 所以,现在查询:

query = SELECT cast ( SUBSTRING ( CAST ("ProcessingDate" AS text), 5, 2 ) as 
        integer), 
        COUNT(*)
        FROM "DemoLogs"."Project" 
        WHERE "Addr" = 'Y' AND "ProcessingDate" >= 20160110 
        GROUP BY 1 
        ORDER BY 1;

现在声明record类型的 result_data ,并按以下方式使用:

我们循环result_data,因为它提供了行数作为输出

我已声明类型resultset的{​​{1}}来存储结果(因为我需要进一步)

text