2017-08-28 111 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;