Ankündigung

Einklappen
Keine Ankündigung bisher.

Verkaufte Mengen bei Group BY

Einklappen

Neue Werbung 2019

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

  • Verkaufte Mengen bei Group BY

    Ich habe zwei Tabellen

    DROP TABLE IF EXISTS `verkaufstage`;
    CREATE TABLE IF NOT EXISTS `verkaufstage` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `geschaeft_id` int(11) NOT NULL,
    `datum` date NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;

    --
    -- Daten für Tabelle `verkaufstage`
    --

    INSERT INTO `verkaufstage` (`id`, `geschaeft_id`, `datum`) VALUES
    (5, 1, '2019-01-16'),
    (2, 2, '2019-01-14'),
    (4, 2, '2019-01-15'),
    (1, 1, '2019-01-14'),
    (3, 1, '2019-01-15');
    COMMIT;


    DROP TABLE IF EXISTS `verkaeufe`;
    CREATE TABLE IF NOT EXISTS `verkaeufe` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `verkaufstage_id` int(11) NOT NULL,
    `artikel_id` int(11) NOT NULL,
    `menge` int(11) NOT NULL,
    `VK` float NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;

    --
    -- Daten für Tabelle `verkaeufe`
    --

    INSERT INTO `verkaeufe` (`id`, `verkaufstage_id`, `artikel_id`, `menge`, `VK`) VALUES
    (1, 1, 1, 2, 1),
    (2, 1, 2, 3, 1),
    (3, 2, 1, 3, 1),
    (4, 2, 2, 4, 1),
    (5, 3, 1, 1, 1),
    (6, 3, 1, 1, 1),
    (7, 4, 1, 1, 1),
    (8, 5, 1, 1, 1),
    (9, 5, 2, 2, 1);
    COMMIT;

    Ich brauche eine Abfrage, wo nach geschaefts_id gruppiert und die Anzahl verkaufter Artikel pro article_id in einer Spalte errechnet wird. Wenn ich das so mache:


    SELECT
    `geschaeft_id` FROM verkaufstage,
    if(
    verkaeufe.artikel_id='1',
    SUM(menge),
    0
    ) AS Verkauft
    JOIN verkaeufe ON verkaufstage.id = verkaeufe.verkaufstage_id
    GROUP BY
    `geschaeft_id`

    Erhalte ich:
    #1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'desd.verkaeufe.artikel_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    Das lässt mich dann erst mal ratlos, weil ich article_id ja nicht gruppieren kann ...



  • #2
    das SQL ist ja schon mal syntaktisch Murks, weil nach dem FROM verkaufstage dann noch mal ein IF kommt (was SQL IIRC so nicht kennt, es kennt CASE) und dann ein JOIN.

    Code:
    test=*# select geschaeft_id verkaufstage, verkaeufe.artikel_id from verkaufstage JOIN verkaeufe ON verkaufstage.id = verkaeufe.verkaufstage_id group by geschaeft_id, verkaeufe.artikel_id;
     verkaufstage | artikel_id
    --------------+------------
                2 |          1
                2 |          2
                1 |          1
                1 |          2
    (4 rows)
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Ah, letzte Version nicht mehr hier rein kopiert.

      Code:
      SELECT
      `geschaeft_id`,
      if(
      verkaeufe.artikel_id='1',
      SUM(menge),
      0
      ) AS Verkauft 1,
      if(
      verkaeufe.artikel_id='2',
      SUM(menge),
      0
      ) AS Verkauft 2,
      FROM verkaufstage
      JOIN verkaeufe ON verkaufstage.id = verkaeufe.verkaufstage_id
      GROUP BY
      `geschaeft_id`

      Ich brauche nicht artikel_id, sondern die Summe der Menge für einen bestimmten Artikel pro Spalte

      Kommentar


      • #4
        phpP bitte Code-Tags hier im Forum nutzen. Danke.
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Code:
          test=*# select geschaeft_id verkaufstage, sum(menge), sum(case when artikel_id = 1 then menge else 0 end) as artikel1, sum(case when artikel_id = 2 then menge else 0 end) as artikel2 from verkaufstage JOIN verkaeufe ON verkaufstage.id = verkaeufe.verkaufstage_id group by geschaeft_id;
           verkaufstage | sum | artikel1 | artikel2
          --------------+-----+----------+----------
                      1 |  10 |        5 |        5
                      2 |   8 |        4 |        4
          (2 rows)
          
          test=*#
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            @hausl: Mich hat da schon öfters das Verschwinden der Zeilenumbrüche zum Wahnsinn getrieben. Gibt's da einen Trick?

            Kommentar


            • #7
              akretschmer
              Klasse, so geht's. Großen Dank.

              Falls noch mal jemand hier nachschaut: In der letzten Tabelle von akretschmer ist der Bezeichner für die erste Spalte korrekt Geschäft, nicht verkaufstage, das könnte verwirren.

              Kommentar

              Lädt...
              X