【问题标题】:How to get the sum?如何获得总和?
【发布时间】:2014-01-23 14:05:58
【问题描述】:

我在 Oracle SQL 中的查询中遇到了问题。我不知道如何得到这个查询的总和:

select call_type, channel
,count (case when status="no answer" then 1 end else 0) as cnt_no_answer
,count (case when status="answered" then 1 end else 0) as cnt_answer
from app_account.cc_call;

请帮助我。谢谢!

【问题讨论】:

  • 总和是什么?如果没有 group by 子句,您发布的查询似乎无效。
  • 你要对哪一列求和?
  • 我想得到没有回答和回答的总和
  • 使用SUM而不是COUNT,并在表名后附加GROUP BY call_type, channel
  • @kordirko 它不起作用:(当我使用 sum 而不是 count 时,结果为 NULL

标签: oracle plsql count oracle-sqldeveloper plsqldeveloper


【解决方案1】:

获取已回答和未回答的记录总和而不是计数。要获取已回答或未回答的所有记录的数量,请使用 count(status)。要获取所有记录的计数,即状态为 null 的记录也使用 count(*)。字符串需要单引号,而不是双引号。 case 语句需要 END。

已编辑(使用的 END 过多):

select call_type, channel
  , sum(case when status='no answer' then 1 else 0 end) as cnt_no_answer
  , sum(case when status='answered' then 1 else 0 end) as cnt_answer
  , count(status) as cnt_all_stated
  , count(*) as cnt_all_records
from app_account.cc_call
group by call_type, channel;

【讨论】:

  • 我试图运行您的查询,但我得到的只是这个 ORA-00907:缺少右括号 00907。00000 -“缺少右括号”
  • 是的,抱歉,有“then 1 end else 0 end”导致语法错误。在其他之前必须没有结束。抱歉我没看到。
【解决方案2】:

再试一次,我编辑它:

SELECT call_type, channel,
       sum (CASE WHEN status='no answer' THEN 1 ELSE 0 END) AS cnt_no_answer,
       sum (CASE WHEN status='answered' THEN 1 ELSE 0 END) AS cnt_answer
FROM app_account.cc_call
GROUP BY call_type, channel;

【讨论】:

  • 出现错误。这里是 ORA-00907:缺少右括号 00907。00000 -“缺少右括号” *原因:*操作:第 7 行错误:第 7 列:46
  • (case when status="no answer" then 1 end else 0)替换为(case when status="no answer" then 1 else 0 end),将(case when status="answered" then 1 end else 0)替换为(case when status="answered" then 1 else 0 end),存在语法错误
  • 这是新的错误 ORA-00904:“已回答”:无效标识符 00904。00000 -“%s:无效标识符”
【解决方案3】:

看看这个:

SELECT   CALL_TYPE,
       CHANNEL,
       COUNT (CASE WHEN UPPER(STATUS) = UPPER('no answer') THEN 1 ELSE NULL END)
           AS CNT_NO_ANSWER,
       COUNT (CASE WHEN UPPER(STATUS) = UPPER('answered') THEN 1 ELSE NULL END)
           AS CNT_ANSWER
FROM   APP_ACCOUNT.CC_CALL
GROUP BY   CALL_TYPE, CHANNEL;

【讨论】:

  • 有一些错误 ORA-00904:“已回答”:无效标识符 00904。00000 -“%s:无效标识符” *原因:*操作:第 14 行错误:第 34 列
  • 查询正在运行,但 cnt_no_answer 和_cnt_answer 中的结果均为零
  • 能否请您将此查询的结果发送给我们:SELECT CALL_TYPE, CHANNEL, STATUS, count(*) FROM APP_ACCOUNT.CC_CALL GROUP BY CALL_TYPE, CHANNEL, STATUS;
  • 这是对 call_type 表的查询的一些结果 - LANDLINE MOBILE-GLOBE MOBILE-SUN 其他 MOBILE-SMART MOBILE-SUN 用于频道 - DAHDI/i1/ SIP/hcsim2 DAHDI/i2/ DAHDI/i1 / DAHDI/i2/ DAHDI/i1/ for status - FAILED ANSWERED ANSWER NO ANSWER NO ANSWER for count(*) 1151 1606 4361 137 660 1241
  • 明白了!感谢您的帮助:)
【解决方案4】:

选择呼叫类型、频道

, sum(status='no answer' then 1 else 0 end) as cnt_no_answer

, sum(status='answered' then 1 else 0 end) as cnt_answer

,count(status) as cnt_all_stated

,count(*) as cnt_all_records

来自 app_account.cc_call

按呼叫类型、频道分组;

为什么要使用 end 两次

【讨论】:

    【解决方案5】:
    SELECT Call_type, Channel
    ,COUNT(CASE WHEN status="no answer" then 1 else 0 end ) as Cnt_no_answer
    ,COUNT(CASE WHEN status="answered" then 1 else 0 end ) as Cnt_answer
    from App_account.cc_call 
    GROUP BY call_type,channel;
    

    我认为表减速有一些错误。请给出表格结构。你想要 SUM 并且你在那里计数我不认为这是错误但缺乏概述。请提供更多详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 2019-09-23
      • 2019-12-28
      相关资源
      最近更新 更多