mysql Abfrage | zwei Spalten vergleichen und dann aufsummieren

Wie meinst du das 'mit der summe' ?

Ich habe mir aufgrund deines Beispiels eine Tabelle gemacht und das SQL getestet. Natürlich musste ich die Werte im Feld stck selber ausdenken, da du dort kein Wert eingetragen hast.

Das Resultat von meinem Test siehst du oben.

So sieht meine Testtabelle aus. Diese habe ich aufgrund deiner Angaben zusammengebaut.......
Code:
id | ort       | kommission | auftragsnummer | stck
---------------------------------------------------
1  | stuttgart | kurt       | 1234           | 40
2  | stuttgart | kurt       | NULL           | 1
3  | stuttgart | NULL       | 1234           | 7
4  | muenchen  | egon       | 567            | 10
5  | muenchen  | NULL       | 567            | 12
6  | muenchen  | egon       | NULL           | 12
7  | hamburg   | fritz      | NULL           | 5
8  | hamburg   | fritz      | 890            | 14


SQL:
CREATE TABLE `xdaten` (
	`id` INT(10) NULL DEFAULT NULL,
	`ort` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_general_ci',
	`kommission` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_general_ci',
	`auftragsnummer` INT(10) NULL DEFAULT NULL,
	`stck` INT(10) NULL DEFAULT NULL
);
INSERT INTO `xdaten` (`id`, `ort`, `kommission`, `auftragsnummer`, `stck`) VALUES (1, 'stuttgart', 'kurt', 1234, 40);
INSERT INTO `xdaten` (`id`, `ort`, `kommission`, `auftragsnummer`, `stck`) VALUES (2, 'stuttgart', 'kurt', NULL, 1);
INSERT INTO `xdaten` (`id`, `ort`, `kommission`, `auftragsnummer`, `stck`) VALUES (3, 'stuttgart', NULL, 1234, 7);
INSERT INTO `xdaten` (`id`, `ort`, `kommission`, `auftragsnummer`, `stck`) VALUES (4, 'muenchen', 'egon', 567, 10);
INSERT INTO `xdaten` (`id`, `ort`, `kommission`, `auftragsnummer`, `stck`) VALUES (5, 'muenchen', NULL, 567, 12);
INSERT INTO `xdaten` (`id`, `ort`, `kommission`, `auftragsnummer`, `stck`) VALUES (6, 'muenchen', 'egon', NULL, 12);
INSERT INTO `xdaten` (`id`, `ort`, `kommission`, `auftragsnummer`, `stck`) VALUES (7, 'hamburg', 'fritz', NULL, 5);
INSERT INTO `xdaten` (`id`, `ort`, `kommission`, `auftragsnummer`, `stck`) VALUES (8, 'hamburg', 'fritz', 890, 14);
 
Zuletzt bearbeitet von einem Moderator:
Danke, dass Du mir hilfst!

Um bei meinem Beispiel #7 zu bleiben:

- bei stck steht immer eine 1 drin, sorry, hab das oben in der Tabelle falsch gemacht.
- ich habe deinen codeschnipsel genutzt und bei mir eingefügt, da bekomme ich aber nur stuttgart angezeigt und nicht noch zusätzlich münchen, vielleicht hat das etwas mit dem last zu tun?
- bin jetzt ratlos
 
Wie testest du? Mit welchem Tool?
Ist die DB lokal auf deinem PC? Wenn ja, empfehle ich dir HeidiSQL (http://www.heidisql.com/) zum mit SQL herumzuspielen.

Welches last meinst du? die @last_xy? Das sind nur Variablen. Damit hat es sicher nix zu tun.
 
ich teste mit mysql workbench/administrator
ich habe den Eindruck, dass er nur den letzten Ort auflistet und alle Mehrfachanzahlen darin dann summiert. Deswegen komme ich auf den Verdacht dass es etwas mit dem "last" Ort zu tun hat.

ich hab es jetzt so:
PHP:
$query_x=("
	SELECT
	    ort,lname,lauftr,COUNT(*) AS anzahl,SUM(preis) AS summe
	FROM
	    (
	        SELECT
	            @last_name:= IFNULL(sd.kom_name, @last_name) AS lname,
	            @last_auftr:= IFNULL(sd.kom_auftr, @last_auftr) AS lauftr,
	            @last_ort := sd.ort AS ort,
	            sd.preis
	        FROM
	            x_daten AS sd,
	            (SELECT @last_ort := '', @last_name := '', @last_auftr := '') AS vars
	        ORDER BY
	            sd.ort,
	            sd.kom_name DESC,
	            sd.kom_auftr DESC
	    ) AS groups
	GROUP BY
	    ort,
	    lname,
	    lauftr
	HAVING
	    COUNT(*) > 2
");
$result_x=mysql_query($query_x);
while($row_x=mysql_fetch_object($result_x)) {
	echo "<tr>
			<td>$row_x->ort</td>
			<td class=\"right\">".number_format($row_x->anzahl,0,",",".")."</td>
			<td class=\"right\">".number_format($row_x->summe,2,",",".")."</td>
		</tr>";
}
 
Zuletzt bearbeitet:
oh sorry, jetzt hab ich den fehler - es gitb auch komplett leere einträge, die dürfen generell nicht mitgezählt werden. er listet mir jetzt mit deinem script nur die auf, die komplett leer sind.
wie mache ich das jetzt?
 
Mein Script listet doch nicht nur leere Einträge auf. Was sind den bei dir leere Einträge? Eine Zeile ohne etwas drin?

Sag mir doch mal, wie ich etwas programmieren und Testen soll, wenn ich die Daten nicht oder wenn dann falsch habe? Auf diese Weise werde ich nie deine Probleme nachvollziehen können
 
Das sind alle Daten, Du hast das auch richtig gemacht. Allerdings gibt es ein paar Einträge in der DB (die ich vergessen habe zu erwähnen), wo der name und die nummer leer sind. Also weder Kurt o.ä. noch 1234 o.ä.
 
Zurück