Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL:如果其他属性的值为空,如何汇总值;如果其他属性的值为非值,如何汇总值,然后计算百分比_Sql_Oracle - Fatal编程技术网

Oracle SQL:如果其他属性的值为空,如何汇总值;如果其他属性的值为非值,如何汇总值,然后计算百分比

Oracle SQL:如果其他属性的值为空,如何汇总值;如果其他属性的值为非值,如何汇总值,然后计算百分比,sql,oracle,Sql,Oracle,我有工资表和雇主获得额外奖金的属性(是值)。 我想计算没有奖金的雇主的工资总额和有奖金的工资总额。 具有属性的表是 id salary extra_bonus --- ------- ----------- 1 1200 yes 2 900 3 1300 4 800 yes 5 1100 yes 我想得到这样的报告 sumsalary sumextrabonussalary percent ------

我有工资表和雇主获得额外奖金的属性(是值)。 我想计算没有奖金的雇主的工资总额和有奖金的工资总额。 具有属性的表是

id   salary     extra_bonus
---  -------    -----------
 1   1200       yes
 2   900
 3   1300
 4   800        yes
 5   1100       yes
我想得到这样的报告

sumsalary  sumextrabonussalary  percent
---------  -------------------  -------
3100       2100                 67,7%

我已经很久没有与Oracle合作了,但我相信这应该是可行的:

SELECT
    SUM(CASE WHEN extra_bonus = 'yes' THEN 0 ELSE salary END) As sumsalary,
    SUM(CASE WHEN extra_bonus = 'yes' THEN salary ELSE 0 END) AS sumextrabonussalary,
    SUM(CASE WHEN extra_bonus = 'yes' THEN salary ELSE 0 END)/
    SUM(CASE WHEN extra_bonus = 'yes' THEN 0 ELSE salary END) AS percent
FROM
    My_Table

我已经很久没有与Oracle合作了,但我相信这应该是可行的:

SELECT
    SUM(CASE WHEN extra_bonus = 'yes' THEN 0 ELSE salary END) As sumsalary,
    SUM(CASE WHEN extra_bonus = 'yes' THEN salary ELSE 0 END) AS sumextrabonussalary,
    SUM(CASE WHEN extra_bonus = 'yes' THEN salary ELSE 0 END)/
    SUM(CASE WHEN extra_bonus = 'yes' THEN 0 ELSE salary END) AS percent
FROM
    My_Table

在FROM的
后面使用条件聚合和子查询

 SELECT sumsalary, sumextrabonussalary, sumsalary / sumextrabonussalary * 100 as Percent
 FROM
 (
   SELECT SUM( CASE WHEN extra_bonus IS NULL THEN salary END ) AS sumsalary,
          SUM( CASE WHEN extra_bonus = 'yes' THEN salary END ) AS sumextrabonussalary
   FROM yourtable
 ) t

在FROM的
后面使用条件聚合和子查询

 SELECT sumsalary, sumextrabonussalary, sumsalary / sumextrabonussalary * 100 as Percent
 FROM
 (
   SELECT SUM( CASE WHEN extra_bonus IS NULL THEN salary END ) AS sumsalary,
          SUM( CASE WHEN extra_bonus = 'yes' THEN salary END ) AS sumextrabonussalary
   FROM yourtable
 ) t

查看分组依据和聚合函数。你的计算结果正确吗?有几件事情看起来不对劲(比如数字可能颠倒过来,2100应该是2200)?检查分组方式和聚合函数。你的计算结果正确吗?有几件事情看起来不对劲(比如可能颠倒的数字和2100应该是2200的数字)?
NULL“是”
的计算结果不是真的-它的计算结果是
NULL
;因此,您的
sumsalary
值将始终为0。只有当其值为NULL时,才会计算为NULL。如果它的值为空字符串(这是我在OP中看到的),那么它将正确地计算为true或false。你是对的,我应该指出这一点,因为OP有点不清楚。谢谢。我不知道。愚蠢的数据库引擎。
NULL“yes”
的计算结果不是true-它的计算结果是
NULL
;因此,您的
sumsalary
值将始终为0。只有当其值为NULL时,才会计算为NULL。如果它的值为空字符串(这是我在OP中看到的),那么它将正确地计算为true或false。你是对的,我应该指出这一点,因为OP有点不清楚。谢谢。我不知道。愚蠢的数据库引擎。让我们。嗨,在ThxLet us后面这个条件聚合也起作用。嗨,在Thx后面这个条件聚合也起作用