проблема с SELECT внутри предложения WHERE postgres - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь создать таблицу с помощью этих команд:

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;

К сожалению, я получаю ошибку в предложении select внутри где. Я использую postgres.

Есть предложения? Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 12 сентября 2018

В дополнение к другим пунктам о СОЗДАТЬ ТАБЛИЦУ КАК ВЫБРАТЬ В , я бы высоко предложил бы вам оформить заказ CREATE MATERIALIZED VIEW, что звучит больше, чем выхочет ..

0 голосов
/ 11 сентября 2018

Ваш запрос имеет множество особенностей. Следующий синтаксис был бы более правильным:

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;

Это исправляет следующие ошибки:

  • Postgres рекомендует CREATE TABLE AS свыше SELECT INTO (см. здесь ).
  • При создании таблицы должны быть названы все столбцы.
  • Вам нужны скобки вокруг подзапроса.

Однако запрос не имеет смысла. Он создает таблицу с именем consolidado, а также читает из таблицы. Это логически хлопотно. Кроме того, qtMetodo и qtdeServico обычно имеют одинаковые значения - они находятся в столбцах GROUP BY, означая, что они разделены группами.

0 голосов
/ 11 сентября 2018

Предполагается, что consolidado уже существует. Вам нужно будет использовать синтаксис INSERT INTO ()... SELECT. Подзапрос также должен быть в скобках:

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;
0 голосов
/ 11 сентября 2018

Попробуйте окружить предложение 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...