PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bestimmtes Feld ohne PHP summieren?



Dormant
10-01-2007, 09:10
Hi,

also ich muss gestehen, weder PHP, noch MySQL gehoert zu meinen Staerken. Habe vor kurzem einen Netflow Server mit DB aufgesetzt und wuerde jetzt gerne die Daten zusammenzaehlen (ohne PHP). Gibt es da einen einfachen Query bei SQL?
Der Table besteht aus mehreren Feldern, wichtig dabei waere aber nur das Feld "agent_id" um die Probes zu separieren und das Feld "bytes" wo die Daten enthalten sind. Die betreffenden Zeilen erhalte ich mit:
SELECT *
FROM `acct_v5_sql1_2007_01_10`
WHERE agent_id =102

Daraus wuerde ich jetzt gern alle bytes-Felder zusammenzaehlen lassen. Gibts da ne SUM Funktion oder aehnliches?

Merci

Waxolunist
10-01-2007, 09:57
Hab jetzt keine MySQL gerade zur Hand.

Aber normalerweise gehts mit sum

Also bei Oracle gehts mit:


select sum(bytes) from acct_v5_sql1_2007_01_10 where agent_id =102;


Aber sag einmal, was für Tabellennamen sind das denn? Sehen irgendwie autogeneriert aus.

Wenn du noch mehr Felder dazumöchtest, brauchst du ein group by.

Also z.B.


select agent_id, sum(bytes) from acct_v5_sql1_2007_01_10 where agent_id =102 group by agent_id;

Dormant
10-01-2007, 10:08
Ja, die werden taeglich dynamisch erstellt weil die SQL Abfrage sonst zu lange dauern wuerde. LOL ich scheiss ab, das funktioniert :D und ich waelz jetzt schon ewig die PHP Seiten durch.

Merci dir!



EDIT: mal ganz was bloedes ... die Anzahl der Rows, bekomm ich die so auch irgendwie? :)

Waxolunist
10-01-2007, 10:23
Kommt darauf an was du genau möchtest. Also am einfachsten wäre eine zweite Abfrage á la


select count(*) from ... where ...

Alles in einem sollte so gehen:


select count(bytes), sum(bytes) from ... where ...

mfg, christian

Dormant
10-01-2007, 10:46
Klappt wunderbar! :) Wie einfach SQL eigentlich ist ...

Turbohummel
10-01-2007, 15:40
SQL wurde für den gemeinen Manager entwickelt.
Auch wenn es für die Schlipsträger etwas zu schwer ist, für normaldenkende ist es kein Problem.

Dormant
11-01-2007, 10:45
Dann bin ich wohl nicht normaldenkend. :)

"*" ist kein wildmask-Zeichen bei SQL? (DROP table *2006*)

Waxolunist
11-01-2007, 12:09
wildcards wie du sie meinst sind %

funktioniert aber nicht so bei drop oder ähnlich

da musst du dich schon mit dynamic-sql beschäftigen

Dormant
11-01-2007, 12:16
Guter Hinweis, danke. Werd ich mir mal genauer anschauen .. THX

Christoph
15-01-2007, 11:08
Ja, die werden taeglich dynamisch erstellt weil die SQL Abfrage sonst zu lange dauern wuerde.

Hm, klingt sehr merkwürdig. Normalerweise solltest du das lösen können mittels partieller Indizes. Also alle Sätze in eine Tabelle und je Tag einen Index anlegen: CREATE INDEX ... WHERE DATUM=....;

Waxolunist
15-01-2007, 11:19
Leider arbeitet er aber auf MySQL und da ist die Maximalanzahl der Indizes pro Tabelle auf 16 beschränkt. Da wird er nach 2 Wochen schon ziemlich alt aussehen.

Christoph
15-01-2007, 14:13
Leider arbeitet er aber auf MySQL und da ist die Maximalanzahl der Indizes pro Tabelle auf 16 beschränkt.
Da bin ich ja mal wieder froh, dass ich bisher noch nicht mit MySql arbeiten musste...

Turbohummel
18-01-2007, 09:03
Soweit ich weiß gilt das nur bei MyISAM, bei InnoDB nicht.