![]() |
Datenbank: MySQL • Version: 5.0 • Zugriff über: MicroOLAP DAC
Gesamtsumme der Zeilen
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:
Mit meiner Tabelle bekomme hierfür eine Liste von 17216 Einträg heraus.
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 möchte statt der Liste nur einmal die Zahl 17216 stehen haben Mein Versuch mit diesem Script hier:
Code:
Klappt leider nicht. Nach 5 min. Laufzeit habe ich es abgebrochen. Die Tabellen sind allerdings entsprechend voll: Kunden ca. 200000, Kundenrechnungen ca. 800000.
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); 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 |
AW: Gesamtsumme der Zeilen
Lass die Query doch mal direkt mit dem MySQL Query Browser laufen und die den Ausführungsplan erklären (EXPLAIN ...)
|
AW: Gesamtsumme der Zeilen
Das Ergebnis steht dann so aus:
Code:
Naja, schicker bekomme ich das Ergebnis nicht hin. :oops:
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 Allerdings kann ich hier auch keine Probleme erkennen. |
AW: Gesamtsumme der Zeilen
Code:
Das wundert mich nicht, daß da nicht das gleiche kommt.
SELECT kundnr FROM kundenrechnungen
SELECT COUNT(*) FROM kunden Versuch es doch mal mit
Code:
Gruß
select count(KundNr) from KundenRechnungen....
K-H |
AW: Gesamtsumme der Zeilen
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. |
AW: Gesamtsumme der Zeilen
Zitat:
Ich komm zwar von der Oracle Seite aber ich würd es so machen (weil die kundnr is eh schon eindeutig -> group by):
Code:
Ich hoff ich hab keine Klammer vergessen... ;-)
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); |
AW: Gesamtsumme der Zeilen
Jou, Klasse! :thumb: Das hat funktioniert!
... da hätte ich auch selber drauf kommen können... :lol: Danke! Stephan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz