[英]issue with SELECT inside WHERE clause postgres
I'm trying to create a table using these commands: 我正在尝试使用以下命令创建表:
SELECT
data_req,
count(servico) as qtdeServico,
count(metodo) as qtdeMetodo,
consumerid,
metodo,
status_metodo,
servico,
sum(tempo_req)
INTO
consolidado
FROM
requisicoes AS r
WHERE
r.data_req > SELECT MAX(c.data_req) FROM consolidado c
GROUP BY
data_req, consumerid, metodo, status_metodo, servico;
Unfortunately I'm getting an error at the select clause inside where. 不幸的是,我在where里面的select子句遇到错误。 I'm using postgres.
我正在使用postgres。
Any suggestions? 有什么建议么? Thanks in advance.
提前致谢。
Your query has numerous idiosyncrasies. 您的查询具有许多特质。 The following would be more correct syntax:
以下是更正确的语法:
create table consolidado as
select data_req, count(servico) as qtdeServico, count(metodo) as qtdeMetodo,
consumerid, metodo, status_metodo, servico,
sum(tempo_req) as sum_tempo_req
from requisicoes r
where r.data_req > (select max(c.data_req) from consolidado c)
group by data_req, consumerid, metodo, status_metodo, servico;
This fixes the following errors: 这可以修复以下错误:
CREATE TABLE AS
over SELECT INTO
(see here ). CREATE TABLE AS
不是SELECT INTO
(请参阅此处 )。 However, the query doesn't make sense. 但是,查询没有任何意义。 It is creating a table called
consolidado
and also reading from the table. 它正在创建一个名为
consolidado
的表并从该表中读取。 That is logically troublesome. 从逻辑上讲这很麻烦。 In addition,
qtMetodo
and qtdeServico
will generally have the same values -- they are in the GROUP BY
columns meaning that they are separated by groups. 此外,
qtMetodo
和qtdeServico
通常具有相同的值-它们在GROUP BY
列中,这意味着它们被组分隔。
Try surrounding the SELECT sentence with "(....)": 尝试用“(..)”将SELECT语句括起来:
SELECT
data_req,
count(servico) as qtdeServico,
count(metodo) as qtdeMetodo,
consumerid,
metodo,
status_metodo,
servico,
sum(tempo_req)
into consolidado
FROM requisicoes as r
WHERE
r.data_req > (select max(c.data_req) from consolidado c
GROUP BY data_req, consumerid, metodo, status_metodo, servico);
Assuming consolidado
already exists.. You will need to use INSERT INTO ()... SELECT
syntax. 假设
consolidado
已经存在。。您将需要使用INSERT INTO ()... SELECT
语法。 The subquery should be inside parentheses as well: 子查询也应放在括号内:
INSERT INTO consolidado (data_req, qtdeServico.. rest of cols)
SELECT
data_req,
count(servico) as qtdeServico,
count(metodo) as qtdeMetodo,
consumerid,
metodo,
status_metodo,
servico,
sum(tempo_req)
FROM requisicoes as r
WHERE r.data_req > (select max(c.data_req) from consolidado c)
GROUP BY data_req, consumerid, metodo, status_metodo, servico;
除了关于CREATE TABLE AS和SELECT INTO的其他观点之外,我强烈建议您检出CREATE MATERIALIZED VIEW
,这听起来像是您想要的更多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.