MySQL Abfrage mit unterschiedlichen Summen aus einer Spalte

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

  • MySQL Abfrage mit unterschiedlichen Summen aus einer Spalte

    Hallo, ich hoffe mir kann jemand bei meinem Vorhaben auf die Sprünge helfen. Ich habe folgende Tabelle mit diesen Spalten:

    Datum | Kategorie_ID | Betreff | Betrag
    --------------------------------------

    In dieser Tabelle stehen hunderte Einträge aus verschiedenen Jahren. Nun möchte ich daraus eine Aufstellung der Preise/Kosten erstellen, gruppiert nach Kategorie und Jahr und das dann in einer folgenden Tabelle darstellen:

    Kategorie_ID | Betrag 2014 | Betrag 2013
    ----------------------------------------

    Soweit bin ich bis jetzt:

    Code:
    SELECT kategorie_name AS Kategorie, Kategorie_ID, SUM(Betrag) FROM kb_eintrag
    LEFT JOIN kb_kategorie AS kategorie ON kategorie_ID = kb_eintrag.Kategorie
    WHERE DATE_FORMAT(Datum, '%Y') = '2014'
    AND Kategorie > 1
    GROUP BY Kategorie_Name
    Ich hab nun leider gar keine Idee, wie ich jetzt die Daten aus dem Jahr 2013 in dem Query mit verarbeiten und darstellen kann. Dazu kommt, dass eventuell nicht alle Kategorien in den beiden Jahren vorkommen, dann würden doch "Lücken" entstehen, oder?

    Vielen Dank schon mal...
    Grüße

  • #2
    Zitat von kriztan Beitrag anzeigen

    In dieser Tabelle stehen hunderte Einträge aus verschiedenen Jahren. Nun möchte ich daraus eine Aufstellung der Preise/Kosten erstellen, gruppiert nach Kategorie und Jahr und das dann in einer folgenden Tabelle darstellen:
    Du willst Zeilen zu Spalten machen. Das geht, erklärt z.B. hier:

    https://www.pg-forum.de/viewtopic.php?f=66&t=4067

    Das sollte prinzipiell ähnlich auch in MySQL gehen, beachte aber auch, was da noch so steht.

    Kommentar


    • #3
      Ich hab es jetzt ganz anders gelöst. Für Interessierte:
      Code:
      SELECT kategorie_name AS Kategorie, Kategorie_ID, 
      SUM(IF(DATE_FORMAT(Datum, '%Y') = '".$jahr."' , Betrag, 0.00)) AS jahr, 
      SUM(IF(DATE_FORMAT(Datum, '%Y') = '".$vorjahr."' , Betrag, 0.00)) AS vorjahr
      FROM kb_eintrag
      LEFT JOIN kb_kategorie AS kategorie ON kategorie_ID = kb_eintrag.Kategorie
      WHERE DATE_FORMAT(Datum, '%Y') >= '".$vorjahr."' and DATE_FORMAT(Datum, '%Y') <='".$jahr."'
      AND Kategorie > 1
      GROUP BY Kategorie_Name

      Kommentar


      • #4
        Zitat von kriztan Beitrag anzeigen
        Ich hab es jetzt ganz anders gelöst. Für Interessierte:
        Code:
        SELECT kategorie_name AS Kategorie, Kategorie_ID, 
        SUM(IF(DATE_FORMAT(Datum, '%Y') = '".$jahr."' , Betrag, 0.00)) AS jahr, 
        SUM(IF(DATE_FORMAT(Datum, '%Y') = '".$vorjahr."' , Betrag, 0.00)) AS vorjahr
        FROM kb_eintrag
        LEFT JOIN kb_kategorie AS kategorie ON kategorie_ID = kb_eintrag.Kategorie
        WHERE DATE_FORMAT(Datum, '%Y') >= '".$vorjahr."' and DATE_FORMAT(Datum, '%Y') <='".$jahr."'
        AND Kategorie > 1
        GROUP BY Kategorie_Name
        Genau so ist es richtig und der normale Weg.

        Verbessern könntest bei Bedarf noch das WHERE: Da MySQL keine funktionalen Indexe kennt wird das aufgrund des date_format - rumgehampels als Fulltable-Scan laufen. Also entweder funktionale Indexe, was halt MySQL nicht kann, oder aber es als datum between ... and ... umschreiben.

        Kommentar


        • #5
          Okay, vielen Dank für Dein Feedback

          Kommentar

          Lädt...
          X