Mein SQL ist rostig. Ich habe eine Tabelle, die alle HTTP-Anfragen und ihren Status protokolliert. Was ich will, eine Abfrage tun erstellen, die den Prozentsatz der Ergebnisse zeigen, wo status = pro TagPostgres: Abfrage, die Prozentsatz zurückgibt
hier ‚404 nicht gefunden‘, was die Tabelle
articles=# select * from log limit 1;
path | ip | method | status | time | id
-------------------------------+----------------+--------+--------+----------------------------+---------
/article/balloon-goons-doomed | 198.51.100.108 | GET | 200 OK | 2016-07-01 06:02:39-05 | 1688046
ich in der Lage war zu bekommen wie
sieht die rohen zählt wie diese, aber nicht sicher, wie um den Prozentsatz zu bekommenSELECT date_trunc('day', time) "day", count(*) as count FROM log WHERE
status='404 NOT FOUND' group by 1 ORDER BY 1;
DANKE das war zunächst 0 zurück, aber mit einer kleinen Änderung SELECT date_trunc ('Tag', Zeit) "Tag", ROUND (COUNT (*) FILTER (WHERE Status = '404 nicht gefunden') :: NUMERIC /COUNT (*) * 100, 2) "404 Prozent" VON log GROUP BY 1 ORDER BY 1 – hypnotoad
@hypnotoad ja, OFC: Ich habe die Umwandlung in 'numeric' vergessen (' int/int' ist 'int' , die für Werte zwischen "0" und "1" immer "0" ist. '100.0 * COUNT (...) FILTER (...)/COUNT (...)' wäre auch eine gültige Lösung, wenn Sie Prozentsätze wünschen. – pozs