Group by und Zusammenfassen von Zellen

tluebke

Mitglied
Ich habe folgendes Problem: Ich habe eine Tabelle mit der Struktur:
id, Hits1, Hits2, Hits3, Correctness

Ich möchte die Zeilen nun nacht Hits1-3 gruppieren und alle Werte, die in Correctness stehen zusammenfassend in der passenden Zeile ausgeben, die mit einem ";" getrennt sind.

Beispiel:
0, 1, 1, 1, 0,85
0, 1, 1, 1, 0,6
0, 1, 2, 3, 0,5
0, 1, 2, 3, 0,3
0, 1, 1, 1, 0,4
0, 1, 1, 1, 1,0

wird zu:
0, 1, 1, 1, 0,85;0,6;0,4;1,0
0, 1, 2, 3, 0,5;0,3

Ich habe bis jetzt folgenden Code geschrieben:

PHP:
cursor.execute("SELECT COUNT(Hits1), Hits1, Hits2, Hits3, Correctness FROM %s GROUP BY Hits1, Hits2, Hits3" % (TableName))
for row in cursor:
    cursor.execute("INSERT INTO %s values(%s,%s,%s,'%s',%s,%s,%s)" % (TableNameStat,  row[1],  row[2],  row[3],  row[4],  row[0]))

Das klappt bis jetzt auch gut und er schreibt die erhaltenen Zeilen in eine neue Tabelle. Jedoch fasst er die "Correctness"-Felder nicht zusammen, sondern nimmt entweder den 1. oder letzten gefundenen Zelleneintrag (das weiß ich nicht).

Wie kann ich es erreichen, dass er zu jeder möglichen Kombination auch alle gefundenen Correctness-Inhalte zusammenfasst? Danke für eure Hilfe!
 
Danke für den Hinweis. ich glaube aber, ich habe mich entweder falsch ausgedrückt, oder ich wurde falsche verstanden.
Ich wollte die Spalten schon alle so behalten und nicht zusammenfassen. Nur die Einzelwerte der Correctness-Spalte wollte ich in eine Zelle tun.
Durch dein CONCAT() bin ich auf den Befehl GROUP_CONCAT() gestoßen. Dieser führte zu gewünschtem Ergebnis. Danke sehr.

Nun habe ich aber das Problem, dass er auch leere Zeilen mitnimmt und speichert. Ich also auch solche Ausgaben erhalten: ",,,,,"
Da es GROUP_CONCAT_WS nicht gibt, muss ich das anders lösen.

Mache ich das am besten mit split am "," und dann schauen, ob der Inhalt leer ist? Wenn ja, dann löschen, sonst wieder zusammenfügen? Oder wie würdet ihr vorgehen?
 
Zuletzt bearbeitet:
Oh. GROUP_CONCAT meinte ich auch...

Nochmals. Arbeitest du mit MySQL? Oracle? MS SQL? MS Access? Sonstwas?

Bei MS SQL sollte laut hilfetext bei GROUP_CONCAT nur Nicht-NULL Werte genommen werden. Hast du leere Strings, kannst du sie in NULL wandeln

SQL:
... GROUP_CONCAT(IF(Correctness = '', NULL, Correctness) SEPARATOR ', ') AS list
 
Zuletzt bearbeitet von einem Moderator:
Mann, ich schreibe heute alles anderst als ich es denke. Ich meinte natürlich MySQL... Warum zum Teufel hab ich da MS SQL geschrieben.
 

Neue Beiträge

Zurück