聚合嵌套Pgsql查询

时间:2018-07-09 21:42:24

标签: postgresql nested

我正在尝试查询表以获取一些结果,但是这样做的方式却给我错误:错误:无法嵌套聚合函数调用。

该表如下所示:

ID | canal_c1 | tarifacao |日期| ativo_id

我正在尝试的查询是这样:

SELECT 
  SUM(case when tarifacao = 'ForaPonta' then canal_c1 else 0 end) as ConsForaPonta,
  MAX(case when tarifacao = 'ForaPonta' then canal_c1 else 0 end) as DemForaPonta,
  ativo_id as ativo_id,
  data_leitura_inicio::date as date
FROM
  medicao
WHERE
  medicao.ativo_id in (45) AND 
  medicao.tipo_leitura = 'Consumo' AND 
  medicao.data_leitura_inicio >= '2017-01-01' AND 
  medicao.data_leitura_inicio < '2017-01-10'
GROUP BY
  medicao.ativo_id,
  medicao.data_leitura_inicio::date

这给了我这样的结果: query result 很好,我现在需要的是DemForaPonta字段中的日期时间,为了做到这一点,我尝试了一下,但遇到了这个错误。

 MAX(case when tarifacao = 'ForaPonta' and 
 canal_c1 = MAX(case when tarifacao = 'ForaPonta' then canal_c1 else 0 end)
 then data_leitura_inicio end) as DateDemForaPonta

您知道我该如何实现吗? 谢谢。

编辑: 这是一个示例,查询结果是预期结果。 example

1 个答案:

答案 0 :(得分:0)

举一个带有真实数据的例子会很有帮助。但是无论如何,您可以使用嵌套选择以及其他选项来完成所需的工作。

嵌套的选择

SELECT *,
  MAX(case when tarifacao = 'ForaPonta' and canal_c1 = DemForaPonta then data_leitura_inicio END)
  AS DateDemForaPonta
FROM(
    SELECT
      SUM(case when tarifacao = 'ForaPonta' then canal_c1 else 0 end) as ConsForaPonta,
      MAX(case when tarifacao = 'ForaPonta' then canal_c1 else 0 end) as DemForaPonta,
      ativo_id as ativo_id,
      data_leitura_inicio::date as date
    FROM
      medicao
    WHERE
      medicao.ativo_id in (45) AND 
      medicao.tipo_leitura = 'Consumo' AND 
      medicao.data_leitura_inicio >= '2017-01-01' AND 
      medicao.data_leitura_inicio < '2017-01-10'
    GROUP BY
      medicao.ativo_id,
      medicao.data_leitura_inicio::date
)data

由于我没有数据可以对其进行测试,因此并不真正知道它是否可以解决问题,但应该可以。