Ankündigung

Einklappen
Keine Ankündigung bisher.

Ich habe 2 Datenbankabfragen und wollte sie als eine machen

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

  • Ich habe 2 Datenbankabfragen und wollte sie als eine machen

    Hallo,
    Ich habe folgendes Problem:
    Ich habe 2 Datenbankabfragen und wollte sie als eine machen.
    PHP-Code:
    SELECT SUM(verguetung_leadFROM einkaeufe WHERE bearbeitet_wann >= '$zaehl_heute_von' AND bearbeitet_wann <= '$zaehl_heute_bis'
    SELECT SUM(verguetung_leadFROM einkaeufe WHERE bearbeitet_wann >= '$zaehl_gestern_von' AND bearbeitet_wann <= '$zaehl_gestern_bis' 
    Das erst habe ich schon mal so hinbekommen

    PHP-Code:
    "SELECT
    A.bearbeitet_wann >= '
    $zaehl_heute_von',A.bearbeitet_wann <= '$zaehl_heute_bis',SUM(A.verguetung_lead) AS einkaeufe_verguetet_heute_daten FROM einkaeufe as A 
    Kann man das irgendwie erweitern mit z.b. as B ?

    mfg jens


  • #2
    in etwa so:

    select sum(case when <hier deine condition1> then ... else 0 end) as sum_cond1,sum(case when <condition2> then ... else 0 end) as sum_cond2 from ...

    Eleganter geht es mit sum(...) filter (where ...), sum(...) filter (where ...) ..., aber das kann MySQL natürlich nicht.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      also als demo:

      Code:
      test=*# select * from demo;
       i  | cond
      ----+------
        1 |    1
       10 |    1
       20 |    2
       30 |    2
      (4 rows)
      
      test=*# select sum(i) filter (where cond = 1) as sum_1, sum(i) filter (where cond = 2) as sum_2 from demo;
       sum_1 | sum_2
      --------+--------
           11 |     50
      (1 row)
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        also geht tut das nicht und eine select abfrage mit filter habe ich nix drüber gefunden

        Kommentar


        • #5
          PHP-Code:
          SELECT SUM(if(bearbeitet_wann >= '$zaehl_heute_von' AND bearbeitet_wann <= '$zaehl_heute_bis',verguetung_lead)) as heute,SUM(if(bearbeitet_wann >= '$zaehl_gestern_von' AND bearbeitet_wann <= '$zaehl_gestern_bis',verguetung_lead)) as gestern FROM einkaeufe 
          so geht's ersteinmal

          Kommentar


          • #6
            Ist bearbeitet_wann eine Spalte vom Typ Date oder Datetime?
            Wenn nicht, hast du dort eine Spalte Datum, dann kannst du das gruppieren, wie hier angedeuted
            Code:
            SELECT
                DAY(`Datumsspalte`) AS `Tag`, SUM(`verguetung_lead`)
            FROM
                `einkaeufe`
            WHERE
                (`bearbeitet_wann` >= '$zaehl_heute_von' AND `bearbeitet_wann` <= '$zaehl_heute_bis')
                AND
                (`bearbeitet_wann` >= '$zaehl_gestern_von' AND `bearbeitet_wann` <= '$zaehl_gestern_bis')
            GROUP BY
                `Tag`
            .
            *ungetestet

            Kommentar


            • #7
              Zitat von jens38 Beitrag anzeigen
              also geht tut das nicht und eine select abfrage mit filter habe ich nix drüber gefunden
              gehen tut das schon, zeigte ich ja. Ich schrieb aber auch, daß MySQL das natürlich nicht kann. Dass Du keine Doku dazu gefunden hast dokumentiert, daß Du Google nicht bedienen kannst.

              https://blog.2ndquadrant.com/the-wit...ostgresql-9-4/
              https://www.dbrnd.com/2016/08/postgr...n-aggregation/
              https://popsql.io/learn-sql/postgres...in-postgresql/
              https://use-the-index-luke.com/de/sq...ter-praedikate
              https://modern-sql.com/feature/filter

              reicht das?
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                Zitat von akretschmer Beitrag anzeigen

                gehen tut das schon, zeigte ich ja. Ich schrieb aber auch, daß MySQL das natürlich nicht kann. Dass Du keine Doku dazu gefunden hast dokumentiert, daß Du Google nicht bedienen kannst.

                https://blog.2ndquadrant.com/the-wit...ostgresql-9-4/
                https://www.dbrnd.com/2016/08/postgr...n-aggregation/
                https://popsql.io/learn-sql/postgres...in-postgresql/
                https://use-the-index-luke.com/de/sq...ter-praedikate
                https://modern-sql.com/feature/filter

                reicht das?
                PostgreSQL hat das mysql nicht dann ist klar das ich nichts finde.
                fehler kommt bei mir unbekanntes Schlüsselwort filter

                Kommentar


                • #9
                  Tabelle einkaeufe
                  bearbeitet_wann | verguetung_lead
                  ----+------
                  1536937398 | 99.00
                  1536803939 | 10.00

                  PHP-Code:
                  SELECT
                  SUM
                  (if(bearbeitet_wann >= '1536962460',bearbeitet_wann <= '1537048740',verguetung_lead)) AS einkaeufe_verguetet_heute_daten,
                  SUM(if(bearbeitet_wann >= '1536876060',bearbeitet_wann <= '1536962340',verguetung_lead)) AS einkaeufe_verguetet_gestern_daten,
                  SUM(if(bearbeitet_wann >= '1536444060',bearbeitet_wann <= '1537135140',verguetung_lead)) AS einkaeufe_verguetet_woche_daten
                  FROM einkaeufe 

                  ausgabe
                  [einkaeufe_verguetet_heute_daten] => 109.00 [einkaeufe_verguetet_gestern_daten] => 11.00 [einkaeufe_verguetet_woche_daten] => 2.00 )
                  erste zeile zeit 2018-09-14T15:03:18+00:00
                  zweite zeile zeit 2018-09-13T01:58:59+00:00
                  irgendwie stimmen garnicht die zahlen

                  Kommentar


                  • #10
                    Die stimmen schon, deine Abfrage ist aber blödsinn. Die IF Funktion sieht in Mysql so aus: IF(BEDINGUNG, WAHR, FALSCH) und jetzt vergleich das mit dem was du geschreiben hast.

                    Kommentar


                    • #11
                      Zitat von erc Beitrag anzeigen
                      Die stimmen schon, deine Abfrage ist aber blödsinn. Die IF Funktion sieht in Mysql so aus: IF(BEDINGUNG, WAHR, FALSCH) und jetzt vergleich das mit dem was du geschreiben hast.
                      habe ich jetzt einen denk fehler also if
                      bearbeitet_wann grösser gleich
                      1536962460 und
                      bearbeitet_wann kleiner gleich
                      1537048740 soll sume
                      verguetung_lead ausgeben

                      Kommentar


                      • #12
                        AND statt KOMMA verwenden um Bedinungen zu verknüpfen....

                        Kommentar


                        • #13
                          Zitat von Meister1900 Beitrag anzeigen
                          AND statt KOMMA verwenden um Bedinungen zu verknüpfen....
                          nee nicht in der select abfrage

                          Kommentar


                          • #14
                            Doch, schau dir noch mal an wie die IF Anweisung funktioniert.

                            Kommentar


                            • #15
                              PHP-Code:
                              SELECT
                              SUM
                              (if(bearbeitet_wann between 1536962460 and 1537048740,verguetung_lead0)) AS einkaeufe_verguetet_heute_daten,
                              SUM(if(bearbeitet_wann between 1536876060 and 1536962340,verguetung_lead0)) AS einkaeufe_verguetet_gestern_daten,
                              SUM(if(bearbeitet_wann between 1536444060 and 1537135140,verguetung_lead0)) AS einkaeufe_verguetet_woche_daten
                              FROM einkaeufe 
                              meine halb fertige abfrage.
                              Problem ist ich bekomme das mit den <= und >= nicht hin.

                              Kommentar

                              Lädt...
                              X