从一个选择中除以两个计数

qui*_*n16 3 sql postgresql select percentage

我有一张这样的表:

date(timestamp) Error(integer)   someOtherColumns
Run Code Online (Sandbox Code Playgroud)

我有一个查询来选择特定日期的所有行:

SELECT * from table
WHERE date::date = '2010-01-17'  
Run Code Online (Sandbox Code Playgroud)

现在我需要计算 Error 等于 0(从那天起)的所有行,并将其除以所有行的计数(从那天起)。

所以结果应该是这样的

Date(timestamp)      Percentage of failure
2010-01-17           0.30
Run Code Online (Sandbox Code Playgroud)

数据库相当大,数百万行..

如果有人知道如何在更多天里这样做,那就太好了——从一天到另一天。

Date(timestamp)      Percentage of failure
2010-01-17           0.30
2010-01-18           0.71
and so on
Run Code Online (Sandbox Code Playgroud)

Rom*_*kar 5

这个怎么样(如果error只能是 1 和 0):

select
   date,
   sum(Error)::numeric / count(Error) as "Percentage of failure"
from Table1
group by date
Run Code Online (Sandbox Code Playgroud)

或者,如果error可以是任何整数:

select
   date,
   sum(case when Error > 0 then 1 end)::numeric / count(Error) as "Percentage of failure"
from Table1
group by date
Run Code Online (Sandbox Code Playgroud)

只是我计算过的not 0(假设错误是当 Error != 0 时),并且没有考虑空值(不知道你想如何对待它)。所以这是另一个查询,它将空值视为 0 并以两种相反的方式计算失败的百分比:

select
    date,
    round(count(nullif(Error, 0)) / count(*) ::numeric , 2) as "Percentage of failure",
    1- round(count(nullif(Error, 0)) / count(*) ::numeric , 2) as "Percentage of failure2"
from Table1
group by date
order by date;
Run Code Online (Sandbox Code Playgroud)

sql fiddle demo