AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Gesamtsumme der Zeilen
Thema durchsuchen
Ansicht
Themen-Optionen

Gesamtsumme der Zeilen

Ein Thema von handson · begonnen am 13. Aug 2013 · letzter Beitrag vom 13. Aug 2013
Antwort Antwort
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#1

Gesamtsumme der Zeilen

  Alt 13. Aug 2013, 13:22
Datenbank: MySQL • Version: 5.0 • Zugriff über: MicroOLAP DAC
Hallo nochmal!

Ich kämpfe immer noch mit meinen SQL-Statements. Da die letzte Frage hier im Forum so erfolgreich war, versuche ich es nochmal mit einer Erweiterung.
Hintergrund: Ich habe einen Kundenrechnungstabelle, wo kurze Informationen zu einer Rechnung bzw. Gutschrift gespeichert werden. Rechnungen haben einen positiven Rechnungsbetrag, Gutschrifen einen negativen. Durch die Funktionen SUM und IF bekomme ich heraus, welches die Rechnungen und welches die Gutschriften sind. Dadurch kann ich den prozentualen Anteil der Gutschriften errechnen.

Soweit so gut. Jetzt möchte ich wissen wie viele Kunden in einem bestimmten Anteil enthalten sind.
Die Liste der Kunden bekomme ich mit dem folgenden Script raus:

Code:
SELECT kundnr FROM kundenrechnungen
  WHERE mandantenid = '000'
  GROUP BY kundnr
  HAVING ((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) >= 10 AND
         ((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) <= 19.99:
Mit meiner Tabelle bekomme hierfür eine Liste von 17216 Einträg heraus.
Ich möchte statt der Liste nur einmal die Zahl 17216 stehen haben

Mein Versuch mit diesem Script hier:

Code:
SELECT COUNT(*) FROM kunden
  WHERE mandantenid = '000' AND
        kundnr IN (SELECT kundnr FROM kundenrechnungen
                     WHERE mandantenid = '000'
                     GROUP BY kundnr
                     HAVING ((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) >= 10 AND
                     ((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) <= 19.99);
Klappt leider nicht. Nach 5 min. Laufzeit habe ich es abgebrochen. Die Tabellen sind allerdings entsprechend voll: Kunden ca. 200000, Kundenrechnungen ca. 800000.

Ich frag mich, warum der dafür so lange braucht. Schlüssel sind angelegt.

Hat jemand vielleicht eine Idee? Vielleicht sehe ich den Wald vor lauter Bäumen nicht.

Stephan
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Gesamtsumme der Zeilen

  Alt 13. Aug 2013, 13:26
Lass die Query doch mal direkt mit dem MySQL Query Browser laufen und die den Ausführungsplan erklären (EXPLAIN ...)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Gesamtsumme der Zeilen

  Alt 13. Aug 2013, 13:33
Das Ergebnis steht dann so aus:
Code:
id;select_type;table;type;possible_keys;key;key_len;ref;rows;Extra
1;PRIMARY;kunden;ref;ix_kundnr,ix_kname,ix_plzname,ix_gebdatum,ix_mandantennr,ix_jahresauswertung,ix_pruefung,ix_faxnr,ix_ort,ix_lrechnr,ix_lk,ix_gesperrt,ix_userid,ix_altekundnr,ix_aktion,ix_name,ix_lrechdat,ix_email,ix_email2,ix_strasse,ix_newsletter,ix_kdgrp;ix_aktion;11;const;198186;Using where; Using index
2;DEPENDENT SUBQUERY;kundenrechnungen;ref;ix_mandantenid,id_kundnr,ix_fakturanr;id_kundnr;11;const;899636;Using where
Naja, schicker bekomme ich das Ergebnis nicht hin.

Allerdings kann ich hier auch keine Probleme erkennen.
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Gesamtsumme der Zeilen

  Alt 13. Aug 2013, 13:36
Code:
SELECT kundnr FROM kundenrechnungen

SELECT COUNT(*) FROM kunden
Das wundert mich nicht, daß da nicht das gleiche kommt.

Versuch es doch mal mit
Code:
select count(KundNr) from KundenRechnungen....
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Gesamtsumme der Zeilen

  Alt 13. Aug 2013, 13:41
Er soll ja auch nur die Anzahl der Zeilen ausgeben, die bei der eigentlichen Selektion bei den Kundenrechnungen angezeigt wird. Das mit dem SELECT über die kunden war nur eine Idee, um meine
geünschte Zahl zu bekommen. Wenn ich das nicht mache, zeigt er jeweils die Anzahl der Zeilen pro
Kundennummer an, da ja nach Kundennummer gruppiert wurde. Ich will aber die Anzahl der einzelnen
Kundennummern und nicht alles zusammen.
Stephan Faust
  Mit Zitat antworten Zitat
weisswe
(Gast)

n/a Beiträge
 
#6

AW: Gesamtsumme der Zeilen

  Alt 13. Aug 2013, 13:58
Hallo nochmal!

Mein Versuch mit diesem Script hier:

Code:
SELECT COUNT(*) FROM kunden
  WHERE mandantenid = '000' AND
        kundnr IN (SELECT kundnr FROM kundenrechnungen
                     WHERE mandantenid = '000'
                     GROUP BY kundnr
                     HAVING ((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) >= 10 AND
                     ((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) <= 19.99);
Klappt leider nicht. Nach 5 min. Laufzeit habe ich es abgebrochen. Die Tabellen sind allerdings entsprechend voll: Kunden ca. 200000, Kundenrechnungen ca. 800000.

Stephan
Hallo!

Ich komm zwar von der Oracle Seite aber ich würd es so machen (weil die kundnr is eh schon eindeutig -> group by):

Code:
SELECT COUNT(1) anzahl FROM
(SELECT kundnr FROM kundenrechnungen
                     WHERE mandantenid = '000'
                     GROUP BY kundnr
                     HAVING ((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) >= 10 AND
                     ((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) <= 19.99);
Ich hoff ich hab keine Klammer vergessen...
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Gesamtsumme der Zeilen

  Alt 13. Aug 2013, 14:01
Jou, Klasse! Das hat funktioniert!

... da hätte ich auch selber drauf kommen können...

Danke!

Stephan
Stephan Faust
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz