简体   繁体   English

WHERE子句postgres中的SELECT问题

[英]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: 这可以修复以下错误:

  • Postgres recommends CREATE TABLE AS over SELECT INTO (see here ). Postgres建议使用CREATE TABLE AS不是SELECT INTO (请参阅此处 )。
  • All columns should be named when creating a table. 创建表时应命名所有列。
  • You need parens around the subquery. 您需要在子查询周围添加括号。

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. 此外, qtMetodoqtdeServico通常具有相同的值-它们在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM