代码之家  ›  专栏  ›  技术社区  ›  Mohammed Housseyn Taleb

在我的oracle SQL查询中不是group by表达式

  •  0
  • Mohammed Housseyn Taleb  · 技术社区  · 5 年前

    我已经看到了很多关于这个问题的线索,但我没有得到它的权利,我相信我错过了理解这个主题,这是羞辱我的一天。

    SELECT
        cor.c_order_id, cor.totallines,cor.documentno,cbp.name
    FROM
        c_orderline   col
        LEFT JOIN c_order       cor ON cor.c_order_id = col.c_order_id
        LEFT join c_bpartner    cbp on cbp.c_bpartner_id = cor.c_bpartner_id
    WHERE
        cor.issotrx = 'Y'
        and cor.docstatus not in ('DR','IP')
        AND cor.salesrep_id = 1037317
        and col.qtyordered <> 0
        and cor.dateordered between SYSDATE - 30  and SYSDATE + 30
        AND col.c_orderline_id NOT IN (
            SELECT
                cil.c_orderline_id
            FROM
                c_invoiceline cil
            WHERE
                cil.c_orderline_id IS NOT NULL
        )
        group by cor.c_order_id, cor.documentno
        order by cor.c_order_id, cor.documentno
    

    我做错了什么??

    0 回复  |  直到 5 年前
        1
  •  2
  •   Michael Broughton    5 年前

    group by用于sum()、max()、min()等聚合函数。您在分组中计算什么值?

        2
  •  3
  •   Littlefoot    5 年前

    一个简化的例子,基于Scott的EMP表。

    你就是这么做的:

    SQL> select deptno, job
      2  from emp
      3  group by deptno;
    select deptno, job
                   *
    ERROR at line 1:
    ORA-00979: not a GROUP BY expression
    

    如你所见,甲骨文标记了罪魁祸首 JOB

    因此,如果你想使用 GROUP BY 子句(这是正确的,但是-使用 DISTINCT 分组依据 通常与骨料一起使用,例如 min max avg 然后将所有列放入

    SQL> select deptno, job
      2  from emp
      3  group by deptno, job;
    
        DEPTNO JOB
    ---------- ---------
            20 CLERK
            30 SALESMAN
            20 MANAGER
            30 CLERK
            10 PRESIDENT
            30 MANAGER
            10 CLERK
            10 MANAGER
            20 ANALYST
    
    9 rows selected.
    

    或者,就像我说的-使用 :

    SQL> select distinct deptno, job
      2  from emp;
    
        DEPTNO JOB
    ---------- ---------
            20 CLERK
            30 SALESMAN
            20 MANAGER
            30 CLERK
            10 PRESIDENT
            30 MANAGER
            10 CLERK
            10 MANAGER
            20 ANALYST
    
    9 rows selected.
    
    SQL>
    
        3
  •  2
  •   VBoka    5 年前

    要更正此查询产生的错误,您需要

    group by cor.c_order_id, cor.totallines,cor.documentno,cbp.name
    

    按select语句中不属于聚合函数的所有列分组。 还有什么问题? Here is the DEMO

    在这个演示中,您将看到查询是有效的(按照我建议的更正),但是正如我所问的,您还有什么问题吗。请详细说明,以便我们能提供帮助。干杯!