Mailinglisten-Archive |
Hallo Liste, > Hallo Matthias, > > <QUERY> > SELECT sid, bkid, preis, SUM(preis) AS sum_preis, COUNT(*) AS > num_records FROM gruppierung > GROUP BY sid, bkid > </QUERY> > > <OUTPUT> > sid bkid preis sum_preis num_records > 1 1 20 30 2 > 1 2 20 20 1 > 1 3 45 45 1 > 2 2 45 90 2 > 2 5 12 12 1 > 3 3 5 5 1 > </OUTPUT> Wenn wirklich NUR die identischen sid = bkid benötigt werden, dann geht das hier auch. Habs gerade getestet. SELECT sid, bkid, preis, SUM(preis) AS sum_preis, COUNT(*) AS num_records FROM gruppierung WHERE sid = bkid GROUP BY sid In diesem Falle reicht eine Gruppierung nach sid aus, da sid und bkid sowieso gleich sind. Matthias wrote: > Ich möchte, wenn BKID und SID übereinstimmt den Preis > summieren. Sollte jetzt aber nur BKID und SID unterschiedlich > sein, dann muss der Preis ganz normal dort stehen. Ich hatte in einer ersten Mail bereits vermutet, dass es entweder nur nach meiner ersten Variante funktioniert, wenn sichergestellt werden kann, dass es immer jeweils nur eine Zeile mit sid != bkid gibt, dafür aber mehrere doppelte mit sid = bkid. In diesem - nennen wir es mal homogenen - Fall wird eine Liste ausgegeben, bei denen alle Zeilen mit sid != bkid natürlich trotzdem summiert werden, da sie aber je nur einmal vorkommen, ist die Summe identisch mit dem Preis. Nur Zeilen mit sid = bkid werden entsprechend korrekt summiert (siehe oben unter <OUTPUT>). Einziges Problem: Wenn die Anzahl der Zeilen mit sid != bkid > 1 ist, summieren sich auch hier die Preise. Dafür hätte ich dann keine Lösung im Kopf... Grüße Tim PS an Norbert: War das gewollt, dass ich Deine letzte Mail per PM bekommen habe? -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive