Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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
Sql 子查询除以计数(*)_Sql_Oracle - Fatal编程技术网

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