Ankündigung

Einklappen
Keine Ankündigung bisher.

[MySQL] Hilfe bei Query (Zeilen zu Spalten)

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL] Hilfe bei Query (Zeilen zu Spalten)

    Guten Tag zusammen,

    ich hätte eine Frage zu einem SQL query, wo ich alleine nicht weiterkomme.

    Dies hier ist meine Ausgangstabelle:
    date clusterID count
    2017-4-3 1 748
    2017-4-3 2 218
    2017-4-3 3 1282
    2017-4-4 1 1128
    2017-4-4 2 1143
    2017-4-4 3 214
    2017-4-5 1 2550
    2017-4-5 2 1075
    2017-4-5 3 220

    Und ich hätte gerne, dass jeder cluster seine eigene Spalte bekommt:
    date cluster1 cluster2 cluster3
    2017-4-3 748 218 1282
    2017-4-4 1128 1143 214
    2017-4-5 2550 1075 220

    Kann mir dabei jemand weiterhelfen? Ich bedanke mich im Voraus für alle Kommentare!

    Viele Grüße
    Julian


  • #2
    Du möchtest das deine Ausgabe in einer Anwendung (Php?) wie von dir gezeigt wird? Dann musst du die Struktur nicht mit der Datenbank erzeugen, sondern baust sie danach zusammen, die Daten selbst hast du ja alle.

    Wenn deine clusteranzahl fest steht könntest du das z.B. so wie hier implementieren: https://php-de.github.io/jumpto/grup...igen-kriterien
    Falls das nicht so ist solltest du dir auch die anderen Teilbereiche zum Thema Gruppenbruch etwas genauer anschauen.
    Eine Anmerkung zum Link, der Artikel ist schon einige Jahre alt, die Logik ist weiterhin korrekt, allerdings wird dort noch die veraltete mysql_* Erweiterung genutzt. Stattdessen solltest du PDO oder mysqli einsetzen.

    Kommentar


    • #3


      https://www.php.de/forum/webentwickl...te#post1518035

      Kommentar


      • #4
        Juliannnn Exstieren nur die 3 Cluster wie im Beispiel oder können es auch mehr sein?
        jspit.de github

        Kommentar


        • #5
          Zitat von jspit Beitrag anzeigen
          Juliannnn Exstieren nur die 3 Cluster wie im Beispiel oder können es auch mehr sein?
          Es gibt nur eine feste Anzahl von Clustern.

          Ich habe das Problem bisher nicht lösen können. Auch deshalb nicht, weil ich etwas wichtiges noch nicht erwähnt habe. Die obere Tabelle ist durch folgenden Query zustande gekommen, d.h. der gesuchte Query müsste mit dem ersten kombiniert werden, um auf die Ergebnistabelle zu kommen:
          Code:
          SELECT date, sum(count)
          FROM tabelle 
          GROUP BY date, clusterID

          Kommentar


          • #6
            Es gibt nur eine feste Anzahl von Clustern.
            Mit PHP kannst bei der Ausgabe den Gruppenbruch anwenden, sollte gehen was ich gesehen habe. Bruch auf das Jahr-Monat und bei Wechsel immer neue Tabellenzeile (<tr>).

            https://php-de.github.io/jumpto/gruppenbruch/
            PHP.de Wissenssammlung | Debugging: Finde DEINE Fehler selbst! | mysql_* ist veraltet! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__ | Kein Support per PN

            Kommentar


            • #7
              Wenn die clusterId's bekannt sind, kannst du ja mal dies probieren
              Code:
               SELECT  
                `date`  ,  
                SUM(CASE WHEN  `clusterID` = 1 THEN  `count`  END) AS  `count_1` ,
                SUM(CASE WHEN  `clusterID` = 2 THEN  `count`  END) AS  `count_2` ,  
                SUM(CASE WHEN  `clusterID` = 3 THEN  `count`  END) AS  `count_3`  
               FROM  `tabelle`
               WHERE `clusterID` IN(1,2,3)
               GROUP BY  `date`
              Wenn es funktioniert entsprechend erweitern.
              jspit.de github

              Kommentar


              • #8
                Zitat von jspit Beitrag anzeigen
                Wenn die clusterId's bekannt sind, kannst du ja mal dies probieren
                Code:
                SELECT
                `date` ,
                SUM(CASE WHEN `clusterID` = 1 THEN `count` END) AS `count_1` ,
                SUM(CASE WHEN `clusterID` = 2 THEN `count` END) AS `count_2` ,
                SUM(CASE WHEN `clusterID` = 3 THEN `count` END) AS `count_3`
                FROM `tabelle`
                WHERE `clusterID` IN(1,2,3)
                GROUP BY `date`
                Wenn es funktioniert entsprechend erweitern.

                Danke vielmals! Das ist die Lösung

                Kommentar

                Lädt...
                X