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后面这个条件聚合也起作用