postgresql - 聚合嵌套 Pgsql 查询
问题描述
我正在尝试查询一个表以获得一些结果,但是我这样做的方式给了我错误:错误:不能嵌套聚合函数调用。
该表如下所示:
身份证 | 运河_c1 | 塔里法考 | 日期 | 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
这给了我这样的结果: 查询结果 我现在需要的是来自 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
你知道我怎么能做到这一点吗?谢谢。
编辑:这是一个示例,查询结果是预期结果。 例子
解决方案
有一个真实数据的例子会很有帮助。但无论如何,您可以使用嵌套选择以及其他选项来做您需要的事情。
嵌套选择
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
因为我没有数据来测试它,所以真的不知道它是否有效,但它应该。
推荐阅读
- javascript - 我似乎无法正确回答的 JavaScript charAt 问题
- linux - 手动使资源“忙”
- java - 未来取消触发的 ListenableFuture 回调
- c++ - 参考更新时的 std::vector 损坏
- openssl - 有没有办法将 netty tcnative java 代码与其本机 c 库链接?
- sql - SQL Server + data.table + rxDataStep 中带有 R 脚本的分位数汇总
- python - python如何计算列表元素中的单词
- reactjs - 在子组件中使用 shouldComponentUpdate 似乎会破坏父组件中的状态?
- python - 尝试在 Python 中将数据添加到 mysql 数据库中的表时出现未知列错误
- python - 如何在 python 中以日期格式转换 xsd:duration?