Oh *_*oon 3 sql oracle aggregate-functions
我有一个SQL语句,它计算结束日期为null的活动包的总行数.我目前正在使用(x/y) * 100:
SELECT (SELECT COUNT(*)
FROM packages
WHERE end_dt IS NULL) / (SELECT COUNT(*)
FROM packages) * 100
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法利用任何Oracle函数来更容易地表达这一点?
没有我知道的功能,但你可以简单地查询:
SELECT SUM(CASE WHEN p.end_dt IS NULL THEN 1 ELSE 0 END) / COUNT(*) * 100
FROM PACKAGES p
Run Code Online (Sandbox Code Playgroud)
所以,基本上这个公式是
COUNT(NULL-valued "end_dt") / COUNT(*) * 100
Run Code Online (Sandbox Code Playgroud)
现在,COUNT(NULL-valued "end_dt")语法错误,但它可以表示为COUNT(*) - COUNT(end_dt).所以,公式可以是这样的:
(COUNT(*) - COUNT(end_dt)) / COUNT(*) * 100
Run Code Online (Sandbox Code Playgroud)
如果我们稍微简化它,我们会得到这个:
SELECT (1 - COUNT(end_dt) * 1.0 / COUNT(*)) * 100 AS Percent
FROM packages
Run Code Online (Sandbox Code Playgroud)
该* 1.0位将整数结果转换COUNT为非整数值,因此也使除法非整数.
上面的句子和脚本的相应部分原来是完全垃圾.与其他一些数据库服务器不同,即使两个操作数都是整数,Oracle也不会执行整数除法.此doc页面不包含除法运算符的此类行为的提示.
| 归档时间: |
|
| 查看次数: |
15351 次 |
| 最近记录: |