oracle 计算实际值与错误计算值之间的差值

inn6fuwd  于 2023-01-20  发布在  Oracle
关注(0)|答案(3)|浏览(163)

我有一个查询,需要从这两个查询中获取结果并对其执行减号
"我的任务"

  • 实际-从员工表计算平均薪金
  • 错误-从员工表中计算平均工资,该表中的工资结尾不为零
  • 结果:实际值-错误

下面是我尝试的查询。
质询1:

with actual as (
select avg(salary) as actual  from employees ac);
,
miscalcualtion as (
select avg(salary) from employees mis WHERE MOD(salary, 10) != 0)

select ac.actual - mis.miscalcualtion  from dual;

我得到这个错误:
第2行错误:
ORA-00928:缺少SELECT关键字
SP2 - 0042:未知命令"",-忽略行的其余部分。
SP2 - 0734:以"miscalcual ..."开头的未知命令-忽略行的其余部分。
从双通道选择交流实际
*
第1行错误:
ORA-00904:"AC"。"实际":无效标识符
质询2:

select 
  ac.actual, 
  mis.miscal 
from 
  (
    select 
      avg(salary) as actual 
    from 
      employees ac, 
      (
        select 
          avg(salary) as miscal 
        from 
          employees mis 
        WHERE 
          MOD(salary, 10) != 0
      );

查询#2未获得结果。
质询3:

select 
  (
    (
      select 
        avg(salary) 
      from 
        employees
    ) minus (
      select 
        avg(salary) 
      from 
        employees 
      WHERE 
        MOD(salary, 10) != 0
    )
  ) as Calculation 
from 
  dual;

任何解决方案都非常感谢。解决HackerRank问题

nbnkbykc

nbnkbykc1#

您的第一个查询存在一些语法问题:
1.使用范围外的本地范围别名misact
1.不需要在参数之间使用表达式设置分号
计算两个平均值之间差异的最简单方法:

select
    (SELECT AVG(salary) as actual from employees)
    -
    (SELECT AVG(salary) FROM employees WHERE MOD(salary, 10) != 0)
nkkqxpd9

nkkqxpd92#

我写了答案,通过了
感谢作者作者@Öл е г Б е л о в

    • 查询**
select ceil(avg(salary) - avg(replace(salary,'0',''))) from employees;
mbyulnm0

mbyulnm03#

这在MySQL中有效:

select ceil(avg(salary) - avg(cast(replace(salary, '0', '') as float)))
from employees

相关问题