当前位置: 首页 > 知识库问答 >
问题:

错误42803。列XXXX必须显示子句GROUP BY或在聚合函数中使用

郑高驰
2023-03-14

试图在一个和中进行一个over(order by Id asc行之间的无界前行和当前行),我试图为每个值获得一个累加和。据我所知:

    SELECT  c.id AS Id, c.centro AS Description,  g.id as GroupId, cuen.id as BillId, r.mes_actualizado as UpdatedMonth, cri.agno_mes as YearMonth, gc.signo as Sign, 
    cuen.descripcion->>:language as Bill, false as Comparable, true as Divisor, 
    SUM(cri.importe_cal * gc.signo) over (order by c.Id asc rows between unbounded preceding and current row) AS Amount , 
    g.descripcion->> :language as Group, g.es_total as IsTotal,
    cri.importe, cri.importe_cal  
    FROM public.tabla1 m 
    INNER JOIN public.tabla2 mg ON(mg.ef_modelo_id = m.id) 
    INNER JOIN public.tabla3 g ON(g.id = mg.ef_grupo_id) 
    INNER JOIN public.tabla4 gc ON(gc.ef_grupo_id = g.id) 
    INNER JOIN public.tabla5 cuen ON(cuen.id = gc.ef_cuenta_id) 
    INNER JOIN public.tabla6 cri ON(cri.ef_cuenta_id = cuen.id) 
    INNER JOIN public.tabla7 r ON(r.id = cri.ef_real_id) 
    INNER JOIN public.tabla8 c ON(c.id = r.centro_id )  
    INNER JOIN public.tabla9 mr ON(m.id = mr.ef_modelo_id) 
    INNER JOIN public.tabla10  u ON(mr.rol_id = u.tpl_rol_id) 
    INNER JOIN public.tabla11 cu ON(cu."userId" = u."pId") AND(cu.centro_id = r.centro_id) 
    WHERE u."pId" = :userId AND g.id = :Group AND m.id = :TypeFinancialStatement AND ( cri.agno_mes BETWEEN :dateFrom AND :dateTo ) 
    GROUP BY 1,2,3,4,5,6,7,14,15

共有1个答案

郁权
2023-03-14

窗口函数不需要group by子句。因此,很可能只需要从查询中删除group by子句。

或者,您需要一个常规聚合函数(sum(),没有over()子句),以及group by子句中select子句中的所有其他列,但这不是您的查询所希望的。

另外,您不需要在over子句中使用该框架定义:假设c.id是唯一的列,您只需使用:

SUM(cri.importe_cal * gc.signo) over (order by c.Id) AS Amount
 类似资料:
  • 我有一张桌子看起来像这个叫“Makerar”的人 并且我要为每个CNAME选择最大平均数值。 所以我这样做 然而,这将不会给出预期的结果,并且下面显示了不正确的输出。 实际结果应该是 我如何解决这个问题? 注意:此表是根据以前的操作创建的视图。

  • 问题内容: 我在SO上找到了一些主题,但是仍然找不到适合我的查询的设置。 这是查询,在本地主机上运行得很好: 但是在Heroku上,我 遇到了-GROUP BY子句 上面的错误, 或者在聚合函数中使用 。 然后,我在某处读到,我应该指定表中的所有列,因此我尝试了以下操作: 但这在本地主机上不起作用,在Heroku上也不行… 什么是查询的正确配置? 问题答案: 我认为您正在尝试在同一列上进行汇总和分

  • 演示:https://gcc.godbolt.org/z/c33gbqfqh 我在https://en.cppreference.com/w/cpp/language/aggregate_initialization中没有发现任何关于“析构函数”的提及。标准真的要求聚合字段的析构函数对聚合的每个潜在用户都可用吗?

  • 问题内容: 简而言之,我有一个表格,其中除其他外,还包含一个用于时间戳记的列。我想获得具有最新(即最大价值)时间戳的行。目前,我正在这样做: 但是我宁愿做这样的事情: 但是,SQLite拒绝此查询: 该文件证实了这一行为(页面底部): 聚合函数只能在SELECT语句中使用。 我的问题是:是否可以编写查询以获取具有最大时间戳的行,而无需对select进行排序并将返回的行数限制为1?这似乎应该有可能,

  • 我有一个如下所示的查询 但当我执行上面的sql时,出现了一个错误: 预期结果: 上面的SQL有什么问题?

  • 我试图提供一个实用程序,在该实用程序中,我可以获得表中每列的最大数据长度。 > 我在列表中有列的列表。 我查看每个列表。 执行下面准备好的语句。 带有max函数的prepared语句似乎不能使用动态列。它给出的值不正确。 准备好的语句是否可以与select子句中的动态列一起工作。