kills Geschrieben 21. Januar 2006 Teilen Geschrieben 21. Januar 2006 Hallo zusammen, ich habe einen Query, indem ich ein GROUP BY verwende. Wenn man ein Group by z.b auf ein INT Feld macht, dann addiert er ja diese Werte zusammen. Wie mach ich jetzt aber, bei einem String Feld (varchar), dass er die werte der betroffenen Felder aneinander kettet? Beispiel mit Int: SELECT produkt, SUM(preis) FROM bestellung GROUP BY produkt Jetzt sollten ja alle Produkte einmal ausgegeben werden und der gesamtpreis des ganzen in "preis" stehen (also die preise der einzelnen Produkte aufaddiert) Beispiel mit Varchar: SELECT produkt, ???(kunde) FROM bestellung GROUP BY produkt Jetzt sollten ja alle Produkte einmal ausgegeben werden und die Namen der Kunden aneinander gekettet in "kunde" stehen. Wie stell ich das am besten an? Gruß, Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 21. Januar 2006 Teilen Geschrieben 21. Januar 2006 das wird mysql selbst nicht können, weil aggregatfunktionen wie SUM nur numerische werte annehmen. ich hab das nur einmal hier gesehen, wo mittels CREATE AGGREGATE FUNCTION eine UDF erstellt wird. nachteil ist halt, dass man das programmieren muss, aber dann als native funktion verwenden kann: SELECT produkt, group_concat(kunde, ' ') FROM bestellung GROUP BY produkt; s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 21. Januar 2006 Teilen Geschrieben 21. Januar 2006 Beispiel mit Varchar: SELECT produkt, ???(kunde) FROM bestellung GROUP BY produkt Jetzt sollten ja alle Produkte einmal ausgegeben werden und die Namen der Kunden aneinander gekettet in "kunde" stehen. Wie stell ich das am besten an? Gruß, Markus Sorry aber das ist einfach Quatsch. Erstens ist der Name kein PK also wäre die Ausgabe Milch MüllerMüllerMüllerMüllerSchmitz eh ohne Sinn Zweitens ist ein Statement ohne einer Where Bedingung und ohne Name als PK nicht performant Drittens für welche Programmiersprache brauchst du das ? ich kann mir keine Sprache vorstellen, die mit diesem Gewusel der Namen was sinnvolles anfangen könnte. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 21. Januar 2006 Autor Teilen Geschrieben 21. Januar 2006 Hi, das wird mysql selbst nicht können, weil aggregatfunktionen wie SUM nur numerische werte annehmen. ich hab das nur einmal Danke für den Hinweis, werd ich mir anschauen. Sorry aber das ist einfach Quatsch. Erstens ist der Name kein PK... So ein quatsch. Ist doch total egal ob PK oder nicht.. ..also wäre die Ausgabe Milch MüllerMüllerMüllerMüllerSchmitz eh ohne Sinn.. Wer sagt, dass das ganze nicht einfach nur eine Grundidee ist, die ich noch weiter ausbaue... Sicherliche würde da auf jeden Fall noch ein Trennzeichen hineinkommen.... Zweitens ist ein Statement ohne einer Where Bedingung und ohne Name als PK nicht performantDas ganze war natürlich nur ein Beispiel um das ganze so einfach wie Möglich anschaulich zu mache... Drittens für welche Programmiersprache brauchst du das ? Das ganze ist ja wohl total unabhähgig von der Programmiersprache... Aber für dich: Ich verwende PHP. Ich verwende ein Listen-Erstellungs-Framework, das diese Funktionalität nicht so einfach hergibt. Wenn der SQL aber das entsprechende Resultset liefern würde, dann wäre das ganze ohne größere Anpassungen für mich nuztbar... ich kann mir keine Sprache vorstellen, die mit diesem Gewusel der Namen was sinnvolles anfangen könnte. Naja in welcher Sprache hat man denn Probleme Strings an einem Trennzeichen aufzuteilen und zu verarbeiten? @baba007: Danke für den destruktiven Kommentar. Ist natürlich EINFACH zu Urteilen wenn man die Rahmenbedingungen NICHT kennt... Danke an Amstelchen für die Mühe! Gruß, Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.