Spaltensumme ermitteln
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Spaltensumme ermitteln
Hallo,
ich habe mir ein kleines Log - Program gebaut um die Legeleistung unserer Hühner zu erfassen.
Das Log hängt an einer MariaDB - Datenbank und der Zugriff erfolgt mit den Zeos Komponenten.
Die Tabelle tab01 hat zwei Spalten
Datum im Format Date
Eier im Format integer
In einer ZQuery greife ich mir einen Datumsbereich heraus der auch in einer Tabelle angezeigt wird.
Nun zu meiner Frage:
Wie kann ich die Spalte Eier aufsummieren um sie anzuzeigen ?
Gruß Frank
ich habe mir ein kleines Log - Program gebaut um die Legeleistung unserer Hühner zu erfassen.
Das Log hängt an einer MariaDB - Datenbank und der Zugriff erfolgt mit den Zeos Komponenten.
Die Tabelle tab01 hat zwei Spalten
Datum im Format Date
Eier im Format integer
In einer ZQuery greife ich mir einen Datumsbereich heraus der auch in einer Tabelle angezeigt wird.
Nun zu meiner Frage:
Wie kann ich die Spalte Eier aufsummieren um sie anzuzeigen ?
Gruß Frank
- gladio
- Beiträge: 223
- Registriert: Sa 21. Jun 2014, 06:15
- OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Spaltensumme ermitteln
in etwa so
select sum(eier) as Eiersumme from Tabelle where ...
select sum(eier) as Eiersumme from Tabelle where ...
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Spaltensumme ermitteln
Danke für die Info.
Und wie greife ich auf Eiersumme zu ?
Und wie greife ich auf Eiersumme zu ?
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Spaltensumme ermitteln
Z.B. so:
Code: Alles auswählen
Edit1.Text:=Query1.FieldByName['Eiersumme'].asString;
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
-
- Beiträge: 1061
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Spaltensumme ermitteln
Moglicherweise ist etwas Hintergrundinfo hilfreich.DL3AD hat geschrieben: Di 15. Nov 2022, 20:21 Danke für die Info.
Und wie greife ich auf Eiersumme zu ?
die SQL Anweisung
Code: Alles auswählen
SELECT SUM(eier) As Eiersumme FROM Tabelle WHERE ...
In diesem besonderen Fall wird eine Tabelle mit einer Zeile und einer Spalte erzeugt, wobei das Feld/Spalte Eiersumme heisst
Da funktioniert die Variante von sstvmaster natürlich klaglos und
Code: Alles auswählen
Query1.FieldByName['Eiersumme'].asString;
Als Variante kannst du auch ein TDBText (aus dem Komponentenreiter Data Controls) benutzen, diesem über ein TDataSource an deine TZConnection binden und den Feldnamen einstellen. Dann macht Lazarus das gleich automatisch.
Haarig wird es wenn dein SQL Statement mehr als eine Zeile/Spalte liefert, dann brauchst du eine andere Strategie.
So eine Zählung oder Summenbildung sieht bei mir in etwa so aus (einfach aus Code rauskopiert und etwas angepasst);
Code: Alles auswählen
try
zQuery1.Close;
zQuery1.SQL.Clear;
zQuery1.SQL.Add('SELECT SUM(eier) As Eiersumme FROM Tabelle WHERE ...');
zQuery1.Open;
zQuery1.Last; //lädt ggfs ausständige Daten
zQuery1.First;
If ZQuery1.RecordCount > 1 then showmessage('zuviele Zeilen bei Summierung');
result := zQuery1.fieldbyname('Eiersumme').asInteger; //oder AsString wenns in ein Textfeld soll
//zQuery1.Close; wenn das Feld angezeigt werden soll, dann nicht schließen
except
on E: Exception do
begin
MessageDlg('Fehler bei Summenbildung ' + LineEnding +
'File: ' + {$INCLUDE %FILE%} + LineEnding +
'Methodname: ' + {$I %CURRENTROUTINE%} + LineEnding +
'Linenumber: ' + {$INCLUDE %LINE%} + LineEnding +
E.Message + LineEnding +
'Class: ' + LineEnding +
E.ClassName, mtError, [mbOK], 0);
//und noch einige Logging-Aufgaben
end;
end; //try
- af0815
- Lazarusforum e. V.
- Beiträge: 6777
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Spaltensumme ermitteln
Genauer gesagt liefert das Statement ein Recordset zurück und keine temporäre Tabelle. Durch das Open erwartet die Query eben ein Ergebnis vom Typ Recordset und verarbeitet das. Aber das Recordset muss nicht komplett übertragen sein. Die Query hat die Möglichkeit das in Teilen (Chunks) anzufordern und wird es auch machen. Es macht keinen Simm 1Million Datensätze zu übertragen wenn, der Benutzer gerade mal die ersten 25 davon in der Applikation sieht.charlytango hat geschrieben: Di 15. Nov 2022, 23:49 die SQL Anweisungerzeugt wie jede andere fehlerfrei durchgeführte SELECT-Abfrage als Ergebnis in der TZQuery-Komponente eine Temporärtabelle die man irgendwie abfragen muss.Code: Alles auswählen
SELECT SUM(eier) As Eiersumme FROM Tabelle WHERE ...
In diesem besonderen Fall wird eine Tabelle mit einer Zeile und einer Spalte erzeugt, wobei das Feld/Spalte Eiersumme heisst
Noch dazu muss das Recordset in der Query zwischengepuffert werden und auch Änderungen mitverfolgt. Daher kann er interne Speichplatz sich erheblich vergrößeren, wenn man die Statements nicht gut setzt. Dazu gehört auch, das man Spalten die man nicht benötigt auch nicht verwendet im Statement.
Und es macht absolut Sinn die Funktionen zu verwenden, die der SQL-Server hat zu verwenden. Der kann die Abfrage optimiert ausführen und braucht dann nur eine einzige Zeile als Recordset zurückliefern. Absolut sauber und schnell die Lösung.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Spaltensumme ermitteln
Hallo,
vielen Dank !
Wie immer schnelle und kompetente Antworten.
Gruß Frank
vielen Dank !
Wie immer schnelle und kompetente Antworten.
Gruß Frank