Oracle Sql 查询:SUM() 上的错误查询

Oracle Sql Query : Error Query on SUM()

我想要 sum() 一些列。但不起作用。这是错误 ORA-00937 请帮助我。

查询

SELECT MB.COUNTRY_CODE, /* Error ORA-00937 This line */
       MB.OPERATOR_NAME AS COUNTRY_NAME,
       C.PMN_CODE AS OPERATOR_NAME,
       (C.RANG_START / 1024) AS RANG_START,
       (C.RANG_END / 1024) AS RANG_END,
       COUNT(*) AS TRANSACTION_BY_OPER,
       '0' AS TERMINATE_CHARGE,
       SUM(C.RATE * (COUNT(*))) AS TRANSIT_CHARGE       
  FROM IR_V_IMM_RATE_BY_CDR C 
  LEFT JOIN IR_PMN_MASTER_BROKER MB 
    ON C.COMPANY_CODE = MB.COMPANY_CODE 
   AND C.PMN_DOMAIN = MB.PMN_CODE
  LEFT JOIN IR_PMN_INTER_SERVICE S 
    ON C.PMN_DOMAIN = S.PMN_CODE 
   AND C.COMPANY_CODE = S.COMPANY_CODE
  WHERE C.SUB_EVENT_TYPE_ID = '2'
   AND C.MODIFIER = 'P2P'
   AND S.INTER_SERVICE = 'MMS'
   AND C.COMPANY_CODE = 'AIS'
   AND C.EVENT_TYPE_ID = '602'
   AND C.PMN_DOMAIN = 'AICEN'
   AND TO_CHAR(C.CUTOFF_DATE, 'MM/YYYY') = '04/2015'
  GROUP BY MB.COUNTRY_CODE, MB.OPERATOR_NAME, C.PMN_CODE, C.RANG_START,  
           C.RANG_END, C.RATE

如果删除 3 行。工作正常

COUNT(*) AS TRANSACTION_BY_OPER,
'0' AS TERMINATE_CHARGE,
SUM(C.RATE * (COUNT(*))) AS TRANSIT_CHARGE
....
...
/* Fix If delete 3 line */
GROUP BY MB.COUNTRY_CODE, MB.OPERATOR_NAME,C.PMN_CODE,C.RANG_START,C.RANG_END

现在,我想在此查询中添加 3 行。但错误 ORA-00937

提前致谢。 ;)

SELECT MB.COUNTRY_CODE, /* Error ORA-00937 This line */
       MB.OPERATOR_NAME AS COUNTRY_NAME,
       C.PMN_CODE AS OPERATOR_NAME,
       (C.RANG_START / 1024) AS RANG_START,
       (C.RANG_END / 1024) AS RANG_END,
       COUNT(*) AS TRANSACTION_BY_OPER,
       '0' AS TERMINATE_CHARGE,
       SUM(C.RATE * (COUNT(*))) AS TRANSIT_CHARGE       
  FROM IR_V_IMM_RATE_BY_CDR C 
  LEFT JOIN IR_PMN_MASTER_BROKER MB 
    ON C.COMPANY_CODE = MB.COMPANY_CODE 
   AND C.PMN_DOMAIN = MB.PMN_CODE
  LEFT JOIN IR_PMN_INTER_SERVICE S 
    ON C.PMN_DOMAIN = S.PMN_CODE 
   AND C.COMPANY_CODE = S.COMPANY_CODE
  WHERE C.SUB_EVENT_TYPE_ID = '2'
   AND C.MODIFIER = 'P2P'
   AND S.INTER_SERVICE = 'MMS'
   AND C.COMPANY_CODE = 'AIS'
   AND C.EVENT_TYPE_ID = '602'
   AND C.PMN_DOMAIN = 'AICEN'
   AND TO_CHAR(C.CUTOFF_DATE, 'MM/YYYY') = '04/2015'
  GROUP BY MB.COUNTRY_CODE, MB.OPERATOR_NAME, C.PMN_CODE, C.RANG_START,  
           C.RANG_END,'0'

您正在包含 '0' 但它不包含在分组依据中,也不在聚合函数中。还要从分组依据中删除 C.Rate,因为它正在使用内部聚合函数 Sum。试试这个

您有:

  SUM(C.RATE * (COUNT(*))) AS TRANSIT_CHARGE      

嵌套聚合函数(通常)不起作用。你可能只想:

  SUM(C.RATE) AS TRANSIT_CHARGE    

这会将 group by 之前生成的行的所有费率相加。