avg()

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

  • avg()

    Habe folgende Tabelle:

    Kto Anz. Datum

    798228 4 31.01.2003
    799219 4 31.01.2003
    799229 4 31.01.2003
    798228 3 28.02.2003
    799219 3 28.02.2003
    799229 3 28.02.2003
    798028 3 28.02.2003

    Ich brauche jetzt den Durchschnittswert von "Anz." wobei gruppiert nach Datum jeweils nur ein Wert von "Anz." in die Berechnung einfließen darf.
    Für o. g. Beispiel würde das Ergebnis demzufolge lauten: (4+3)/2 = 3,5

    Stehe irgendwie auf dem Schlauch !
    Hat vielleicht jemand einen Lösungsansatz für mich (am besten mit Beispiel-Query)
    Zuletzt geändert von Honny; 20.05.2003, 21:22.

  • #2
    wie sieht denn die abfrage aus, die das ergebnis wie oben hat?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Ich weiß ja eben nicht wie ich die Abfrage machen muß. Das ist ja mein Problem !

      Kommentar


      • #4
        Code:
        SELECT AVG(anzahl)
        FROM tabelle
        GROUP BY datum
        oder was meinst du?oder einfach nur ein
        Code:
        SELECT AVG(anzahl) FROM tabelle
        ?
        Zuletzt geändert von mrhappiness; 20.05.2003, 21:17.
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Wenn mir das das Ergebnis "3,5" liefert, dann ist das die Lösung, die ich suche. Muß ich jetzt erst mal ausprobieren - kann mir irgendwie nicht vorstellen, daß das funktionieren soll.

          Krieg' ich denn dann nicht Folgendes als Ergebnis ???
          (4+4+4+3+3+3+3)/7 = 3,428...........
          Zuletzt geändert von Honny; 20.05.2003, 22:51.

          Kommentar


          • #6
            Weiß jemand, ob die Lösung von mrhappiness jetzt richtig ist oder nicht ???

            Kann 's zur Zeit leider nicht ausprobieren, da ich im Feld "Anz." aktuell nur 4ren drin hab' und demzufolge das Ergebnis in jedem Fall richtig wäre.

            Müsste man nicht etwas mit "distinct" machen ?????????

            Kommentar


            • #7
              happy's variante ist schon ok so. nur müsstest du zwei queries machen, wenn du den von dir gewünschten AVG haben willst.

              DISTINCT ist mit sicherheit ein guter ansatz

              teste das mal.

              test 1:
              Code:
              SELECT DISTINCT Anz, SUM(Anz) SUMME FROM tabelle
              die anzahl aller rückgaben sind dann in mysql_num_rows(). also deine zahl 2. nun kannst du alle rückdaten der query mit einer schleife durchlaufen und jeweils den durchschnitt errechnen.

              oder test 2:
              Code:
              SELECT AVG(SUM(DISTINCT Anz)) FROM tabelle
              das ist nur eine idee. ob es klappt weiss ich nicht. ich denke aber eher nicht...
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Die zweite Lösung wäre mir die Liebste ! Mal sehen, ob' s klappt !

                Vorerst mal Merci !

                Kommentar


                • #9
                  Ist sie aber nicht ... zumal schon Deine Formel "(4+3)/2 = 3,5"
                  totaler Quatsch ist, da Du ja nach Datum gruppierst und somit
                  alle Datensätze eines Datums zusammen faßt ...

                  In MySQL 4.1 gibt es sogenannte Derived Tables ... damit geht sowas ... !
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Kommentar


                  • #10
                    Wieso ist meine Formel Quatsch ? Beschreibt sie doch nur, was die Query machen soll bzw. wie das Ergebnis aussehen soll.
                    Da ja der Wert des Feldes "Anz." beim selben Datum immer der gleiche ist, brauche ich mir also nur einen Wert je "Datums-Gruppe" (GROUP BY) herauszupicken, dann die Werte addieren und durch die Anzahl dividieren (=> (4+3)/2 = 3,5).
                    Das sollte doch wohl irgendwie zu machen sein !

                    Kommentar


                    • #11
                      dann hol dir in einer abfrage die anzahl je datum.

                      die kannst du dann in php ja in ner schleife addieren und dann durch die anzahl der gelieferten datensätze teilen
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Das geht natürlich auch ! Hätte das Ganze allerdings lieber mit SQL gelöst, da ressourcenschonender und schneller.

                        Kommentar


                        • #13
                          kannst evtl. mit sub-selects arbeiten. wäre dann so in der art
                          Code:
                          SELECT 
                           AVG(SELECT DISTINCT anzahl
                           FROM tabelle
                           GROUP BY datum)
                          geht aber erst ab mysql 4.x

                          wenn du das nich hast, geht's nich in einer abfrage
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Nee, hat mein Provider leider nicht !

                            Dann muß ich es halt anders machen !

                            Kommentar

                            Lädt...
                            X