2017-08-28 71 views
0

我有一个包含3列的数据库。一个具有名为路径的文件路径,其中一个具有值OK或NOK,称为状态,另一个具有日期和时间,称为时间列表文件,OK和NOK的计数和按日期排序

Path  Status  Date 
/var/log 200   2016-10-20 
/etc/rc.d 404   2016-10-21 
/etc/rc.d 200   2016-10-21 

所以我试图通过是相同的,但显示的是多少次的成功,而不是按日期和路径成功计数的路径进行排序。

我尝试过这样的事情,但它给了我整个数据库中的错误总数,而不是那些在给定日期发生的错误。

select to_char(time, 'YYYY-MM-DD') as date, 
     (SELECT count(status) from log where status like '404%') as error, 
     (SELECT count(status) from log where status like '200%') as success 
from log group by date, error, success limit 10; 


    date  | error | success 
------------+-------+--------- 
2016-07-01 | 12908 | 1664827 
2016-07-02 | 12908 | 1664827 
2016-07-03 | 12908 | 1664827 
2016-07-04 | 12908 | 1664827 
2016-07-05 | 12908 | 1664827 
2016-07-06 | 12908 | 1664827 
2016-07-07 | 12908 | 1664827 
2016-07-08 | 12908 | 1664827 
2016-07-09 | 12908 | 1664827 
2016-07-10 | 12908 | 1664827 
(10 rows) 
+0

运行“选择路径,状态,算作从日志日期(状态),TO_CHAR(时间, 'YYYY-MM-DD')按路径,状态,日期分组;“给了我正确的计数,但是我得到了每个日期的一个条目,其中显示了多少次成功以及多少次失败。 –

回答

0

你可以做一个SUMIF像在Excel中:

SELECT 
    date, 
    path, 
    SUM(IF(status like '200%', 1, 0)) as success, 
    SUM(IF(status like '404%', 1, 0)) as error 
FROM log 
GROUP BY date, path;