Im Unterschied zu den "normalen Funktionen" führen Aggregatfunktionen Operationen über alle (bzw. alle ausgewählten) Datensätze einer Datenquelle aus. Die beiden wichtigsten Aggregatfunktionen dürften wohl
SUM
für die SummierungCOUNT
für die Ermittlung der Anzahlsein.
Aggregatfunktionen erwarten fast immer eine GROUP BY-Klausel. Die SQL-Sequenz
SELECT SUM(BytesSent) AS SUMME ,COUNT(BytesSent) AS ANZAHLByte ,COUNT(RemoteHostName) AS ANZAHL FROM apache_tage.log
liefert eine einzige Ergebniszeile mit der Summe der übertragenen Bytes, der Anzahl der Datensätze, die hierzu einen Wert haben und der Gesamtzahl der Datensätze. Hingegen funktioniert
SELECT SUM(BytesSent) AS SUMME ,COUNT(BytesSent) AS ANZAHLByte ,RemoteHostName FROM apache_tage.log
nicht. Der LogParser gibt die folgende Fehlermeldung aus: Error: Semantic Error: presence of field(s) and aggregate function(s) in the SELECT clause with no GROUP BY clause. Der LogfileParser will also eine GROUP BY
-Klausel sehen. Also z.B.
SELECT SUM(BytesSent) AS SUMME ,COUNT(BytesSent) AS ANZAHLByte ,RemoteHostName FROM apache_tage.log GROUP BY RemoteHostName ORDER BY RemoteHostName
Wir gruppieren (und sortieren gleich noch) nach der IP-Adresse (Feld RemoteHostName).
Im Beispiele Logfiles zur Auswertung eines Apache Logfiles werden in der Zeile
,DIV(SUM(BytesSent),MUL(1024,1024)) AS SUMMEinMB
sowohl eine Aggregatfunktion (SUM) wie auch normale Funktionen (DIV und MUL) verwendet.