Sql 子查询除以计数(*)
我正在运行一个查询,并尝试获取数据库中失败与成功的返回百分比Sql 子查询除以计数(*),sql,oracle,Sql,Oracle,我正在运行一个查询,并尝试获取数据库中失败与成功的返回百分比 SELECT ((SELECT count(*) FROM validation WHERE request_date BETWEEN (SYSDATE - 30/(24*60)) AND SYSDATE AND response != 'VERIFIED') / count(*)) AS percentage FROM (SELECT * FROM validation WHERE request_date BETWEEN (SYS
SELECT ((SELECT count(*) FROM validation WHERE request_date BETWEEN (SYSDATE - 30/(24*60)) AND SYSDATE AND response != 'VERIFIED') / count(*))
AS percentage
FROM (SELECT * FROM validation
WHERE request_date BETWEEN (SYSDATE - 30/(24*60)) AND SYSDATE)
;
它返回错误“ORA-00937:不是单个组函数”。我本以为子查询将返回一个值,因此我可以简单地将其除以计数(*)。有什么想法吗?您可能只需要从dual中获得两个子查询
Select
(SELECT count(*) FROM validation WHERE request_date BETWEEN (SYSDATE - 30/(24*60)) AND SYSDATE AND response != 'VERIFIED')/
(SELECT count(*) FROM validation WHERE request_date BETWEEN (SYSDATE - 30/(24*60)) AND SYSDATE)
from dual;
你把问题复杂化了。您不需要任何子查询:
select count(case when response != 'VERIFIED' then 'X' end) / count(*) as percentage
from validation
where request_date BETWEEN (SYSDATE - 30/(24*60)) AND SYSDATE
就我个人而言,我认为编写查询的最佳方式是:
select avg(case when response <> 'VERIFIED' then 1.0 else 0 end) as percentage
from validation v
where request_date BETWEEN (SYSDATE - 30/(24*60)) AND SYSDATE;
对甲骨文来说,这仍然是一个难点,我从未想过在计数函数中放入case语句。谢谢你的提示!嘿,伙计,我想你可以这样做,但我觉得我不需要这样做。
where request_date between sysdate - interval '30' minute and sysdate