• Oracle“ORA-00979:不是GROUP BY 表达式”解决方式


    今天在工作中碰到一个问题,用group by 语句进行分组时出现ORA-00979错误。

    代码如下:

    select R.ORDER_NO,
           R.PRODUCT_CODE,
           R.REGION_NO,
           R.ORGAN_NEW_NO,
           R.ORGAN_NAME,
           R.ERROR_TYPE,
           R.SALE_DISCOUNT,
           R.SALE_NUM,
           R.REMARK,
           DECODE(R.ERROR_TYPE,
                  '1',
                  '数量异常',
                  '2',
                  '折扣异常',
                  '3',
                  '提前销售') ERROR_TYPE_DES,
           A.REGION_NAME REGION_NAME,
           P.PUTONSALE_DATE PUTONSALE_DATE,
           P.REMARK PRODUCT_LEVEL,
           P.SALE_DATE SALE_DATE
      from U_MD_WX2.ITSC_MSG_ABNORMAL_RECORD R,
           U_MD_WX2.ITSC_PUTONSALE_INFO      P,
           U_MD_WX2.ITSC_AREA_CONFIG         A
     WHERE R.REGION_NO = A.REGION_NO
       and R.PRODUCT_CODE = P.PRODUCT_CODE
     group by R.ORDER_NO,
              R.PRODUCT_CODE,
              R.REGION_NO,
              R.ORGAN_NEW_NO,
              R.ORGAN_NAME,
              R.ERROR_TYPE,
              R.SALE_DISCOUNT,
              R.SALE_NUM,
              DECODE(R.ERROR_TYPE,
                     '1',
                     '数量异常',
                     '2',
                     '折扣异常',
                     '3',
                     '提前销售'),
              A.REGION_NAME,
              P.PUTONSALE_DATE,
              SALE_DATE
    代码

    运行时出现以下错误:

    经自己排查后,发现是group by后面缺少字段。

    本以为,查询所有字段,然后按照其中几个字段进行分组。。。

    仔细想想后,我太傻了,查询所有字段怎么可用只用部分字段进行分组,又没有使用聚合函数。

    正确的方式应该是查询多少字段,group by 后面就要加上多少字段。

    正确的代码如下:

    select R.ORDER_NO,
           R.PRODUCT_CODE,
           R.REGION_NO,
           R.ORGAN_NEW_NO,
           R.ORGAN_NAME,
           R.ERROR_TYPE,
           R.SALE_DISCOUNT,
           R.SALE_NUM,
           R.REMARK,
           DECODE(R.ERROR_TYPE,
                  '1',
                  '数量异常',
                  '2',
                  '折扣异常',
                  '3',
                  '提前销售') ERROR_TYPE_DES,
           A.REGION_NAME REGION_NAME,
           P.PUTONSALE_DATE PUTONSALE_DATE,
           P.REMARK PRODUCT_LEVEL,
           P.SALE_DATE SALE_DATE
      from U_MD_WX2.ITSC_MSG_ABNORMAL_RECORD R,
           U_MD_WX2.ITSC_PUTONSALE_INFO      P,
           U_MD_WX2.ITSC_AREA_CONFIG         A
     WHERE R.REGION_NO = A.REGION_NO
       and R.PRODUCT_CODE = P.PRODUCT_CODE
     group by R.ORDER_NO,
              R.PRODUCT_CODE,
              R.REGION_NO,
              R.ORGAN_NEW_NO,
              R.ORGAN_NAME,
              R.ERROR_TYPE,
              R.SALE_DISCOUNT,
              R.SALE_NUM,
              R.REMARK,
              DECODE(R.ERROR_TYPE,
                     '1',
                     '数量异常',
                     '2',
                     '折扣异常',
                     '3',
                     '提前销售'),
              A.REGION_NAME,
              P.PUTONSALE_DATE,
              P.REMARK,
              SALE_DATE
    代码

    Oracle基础还要补啊。

  • 相关阅读:
    [BZOJ] 1623: [Usaco2008 Open]Cow Cars 奶牛飞车
    [BZOJ] 3631: [JLOI2014]松鼠的新家
    [BZOJ] 1775: [Usaco2009 Dec]Vidgame 电视游戏问题
    [BZOJ] 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场
    [Codeforces] #432 div.2 (Virtual)
    [BZOJ] 1819: [JSOI]Word Query电子字典
    [Codeforces] #436 E. Fire
    [Codeforces] #436 D. Make a Permutation!
    [Codeforces] #436 C. Bus
    [Codeforces] #436 B. Polycarp and Letters
  • 原文地址:https://www.cnblogs.com/MrZhaoyx/p/11772399.html
Copyright © 2020-2023  润新知