Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit COUNT und JOIN

Einklappen

Neue Werbung 2019

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

  • #16
    Edit: Umbrüche einfügen

    Mann, vielen Dank. Aber leider es ist immer noch nicht ganz das, was ich brauche, und jetzt verstehe ich, warum ich mein Ergebnis genauer hätte definieren müssen:

    Code:
    Query von oben:
    
     SELECT     v.vehicles_id AS `Fhrzg ID`,     v.date AS `Tour Datum`,     v.vehicles_number_plate AS `Kennzeichen`,     v.locations_id AS `Ablade ID`,     COUNT( v.locations_int_no ) AS Anfahrten,     v.locations_market_name AS `Abladestelle`,     SUM( d.value ) AS `Summe Verkäufe` FROM     `vehicle_loadings` v LEFT JOIN     (         SELECT `vehicle_loadings_id` , SUM( `sold` * `VK` ) AS `Value`         FROM `vehicle_loadings_data`         WHERE `sold` >0         GROUP BY `id`     ) d     ON         v.id = d.vehicle_loadings_id GROUP BY     v.vehicles_id, v.date,     v.vehicles_number_plate,     v.locations_id,     v.locations_market_name  ergibt:  
    
    Fhrzg ID  Tour Datum   Kennzeichen  Ablade ID  Anfahrten  Abladestelle   Summe Verkäufe    
    1  2018-12-24   XX-MM 3109   130  2  Autohaus XX 120 
    1  2019-01-07   XX-MM 3109   130  2  Autohaus XX 120 
    7  2019-01-07   XX-MM 348  82   2  Edeka-Markt  120 
    9  2018-12-24   XX-MM 314  82   2  Edeka-Markt  120
    Anfahrten 2 ist das gewünschte Ergebnis.

    Ich brauche als Ergebnis aber das hier, nur mit 2 statt 4 bei Anfahrten

    Fhrzg ID Tour Datum Kennzeichen Ablade ID Anfahrten Abladestelle Summe Verkäufe
    9 2018-12-24 XX-MM 314 82 4 Edeka-Markt 240
    1 2018-12-24 XX-MM 3109 130 4 Autohaus XX 240


    Also pro locations_id nur eine Zeile und dann die Summe der Verkäufe. Das habe ich mit diesem Code erzeugt:
    Code:
    SELECT
        v.vehicles_id AS `Fhrzg ID`,
        v.date AS `Tour Datum`,
        v.vehicles_number_plate AS `Kennzeichen`,
        v.locations_id AS `Ablade ID`,
        COUNT( v.locations_int_no ) AS Anfahrten,
        v.locations_market_name AS `Abladestelle`,
        SUM( d.value ) AS `Summe Verkäufe`
    FROM
        `vehicle_loadings` v
    LEFT JOIN
        (
            SELECT `vehicle_loadings_id` , SUM( `sold` * `VK` ) AS `Value`
            FROM `vehicle_loadings_data`
            WHERE `sold` >0
            GROUP BY `id`
        ) d
        ON
            v.id = d.vehicle_loadings_id
    GROUP BY
        v.locations_id
    Zum Verständnis: es geht in der Auswertung um den Umsatz eines Standplatzes, egal von wem und mit welchem Fahrzeug erzielt. Deswegen sollte die Gruppierung nach locations_id eigentlich reichen. Und es ist eben wichtig zu sehen, wie oft der Standplatz angefahren worden ist. Ich hoffe, ich habe diesmal alle nötigen Infos drin!

    Edit: Sehe gerade, dass die meisten Felder gar keinen Sinn machen. So ist besser:

    Code:
    locations_id Anfahrten Summe Verkäufe
    ===================================
    82               2              240
    130              2              240

    Kommentar


    • #17
      Ich hab meine Logik umgedreht und mit der anderen Tabelle angfangen:

      Code:
      SELECT locations_id, vehicle_loadings_id, articles_id, counted, SUM(`sold` * `VK`) AS `VKWert / Tag`
      FROM vehicle_loadings_data
      LEFT JOIN (
      SELECT id, COUNT(*) as counted FROM `vehicle_loadings` GROUP BY locations_id
      )nr_vistis
      ON vehicle_loadings_data.vehicle_loadings_id = nr_vistis.id  
      JOIN vehicle_loadings v ON vehicle_loadings_data.vehicle_loadings_id = v.id
      GROUP BY locations_id
      So scheint es zu funktionieren

      Kommentar


      • #18
        der Schein trügt, das SQL ist syntaktisch falsch. Das erkennt MySQL nicht und liefert ein zufälliges Resultat. Viel Spaß damit!
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #19
          der Schein trügt, das SQL ist syntaktisch falsch. Das erkennt MySQL nicht und liefert ein zufälliges Resultat. Viel Spaß damit!
          Wo ist denn der Syntax-Fehler?

          Kommentar


          • #20
            Es müssen alle nicht aggregierten Spalten gruppiert werden, Du gruppierst nur eine...

            EDIT: Bin selbst verwundert, dass da nicht gemeckert wird:
            Code:
            LEFT JOIN (
                    SELECT id, COUNT(*) as counted FROM `vehicle_loadings` GROUP BY locations_id
                ) nr_vistis
                ON vehicle_loadings_data.vehicle_loadings_id = nr_vistis.id
            Du selektierst id, gruppierst aber nach location_id?!
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #21
              Zitat von phpP Beitrag anzeigen

              Wo ist denn der Syntax-Fehler?
              siehe #5.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #22
                Es müssen alle nicht aggregierten Spalten gruppiert werden, Du gruppierst nur eine...
                Also alles, was ich nicht mit COUNT oder SUM anfasse? id war da nur zu Testzwecken, brauche ich nicht, ist so dann korrekt?

                HTML-Code:
                SELECT locations_id, vehicle_loadings_id, articles_id, counted, SUM(`sold` * `VK`) AS `VKWert / Tag`
                FROM vehicle_loadings_data
                LEFT JOIN (  
                  SELECT COUNT(*) as counted
                  FROM `vehicle_loadings`
                  GROUP BY locations_id )
                  nr_vistis ON vehicle_loadings_data.vehicle_loadings_id = nr_vistis.id
                JOIN vehicle_loadings v ON vehicle_loadings_data.vehicle_loadings_id = v.id GROUP BY locations_id
                Edit: wie kann man denn die Zeilenumbrüche erhalten, wenn man Code von der Seite hier kopiert?

                Kommentar

                Lädt...
                X