2017-08-28 3 views
0

J'ai une base de données avec 3 colonnes. Celui qui a un chemin de fichier appelé chemin, un avec la valeur OK ou NOK appelé statut et un autre avec la date et l'heure appelée heure.Liste les fichiers, compter le nombre de OK et NOK et trier par date

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

Je suis en train de trier par des chemins qui sont les mêmes, mais montrent un compte de combien de fois il a réussi et non réussie par date et le chemin.

J'ai essayé quelque chose comme ça, mais cela me donne le nombre total d'erreurs de la base de données entière et non celles qui se produisent le jour donné.

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

Running « chemin de sélection, état, compte (état), to_char (temps, 'AAAA-MM-JJ) que la date du journal grouper par chemin, statut, date; " me donne les chiffres corrects mais je reçois une entrée pour chaque date, une qui montre combien de succès et combien d'échecs. –

Répondre

0

Vous pouvez faire un sumif comme dans 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;