AVG nur bei value<>0

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

  • AVG nur bei value<>0

    Hi,

    ich möchte aus einer DB-Abfrage einen Mittelwert einer Note berechnen -z.B. 1.3 .

    Das Problem - fehlt eine Note (value '0' od. "'') wird der Schnitt verfälscht,
    weil dieser Felder beim Mittelwert einbezogen werden.

    Meine bisherige Lösung finde ich unbefriedigend.

    Ich habe es bereits mit SELECT ROUND(AVG(note>0),1) FROM blala ..
    und SELECT ROUND(AVG(note>""),1) FROM blala ..
    versucht. Ohne Erfolg ...

    Die WHERE Klausel fällt aus, weil ich noch count Abfragen dabei habe.

    Fällt euch da was ein?

    cu

    Blaster
    Zuletzt geändert von Blaster; 09.12.2003, 22:03.
    Yuppi, endlich Elite ...

  • #2
    Normalerweise würde ich sagen laß bei der Note NULL-Werte zu ... setzt 0 und '' auf NULL ... dann geht's auch mit AVG.
    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


    • #3
      @goth
      eine kleine verständnisfrage...
      wäre ein "... IF(note<>0,ROUND(AVG(note),1),0) ..." nicht angebrachter?
      Kissolino.com

      Kommentar


      • #4
        Nein ... macht eher weniger Sinn ...

        AVG() an sich liefert den Durchschnitt der gesetzten Werte ... NULL's werden ignoriert und fließen daher nicht in die Wertung ein ...

        Dein Beispiel liefert in meinem Beispiel:
        Code:
        CREATE TABLE `counttest` (
          `note` int(11) default NULL
        ) TYPE=MyISAM;
        
        INSERT INTO `counttest` VALUES (1);
        INSERT INTO `counttest` VALUES (0);
        Das Ergebnis 0.5

        Die einfach Verwendung von AVG(note) liefert 0.5000 ... kein Unterschied ...

        Wird der 2. Datensatz von 0 auf NULL geändert liefern beide Abfragen 1.0 respektive 1.0000 .

        Im übrigen dürftest Du bei 'ner vollständig ANSI konformen DB Probleme bekommen.

        Da ich eher faul bin spare ich mir die Tipparbeit ... von meinet Wegen kannst Du's ja noch runden ... aber mehr ist nicht wirklich sinnvoll.
        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


        • #5
          thx ... jetzt hab auch ich's verstanden.
          Kissolino.com

          Kommentar


          • #6
            @goth:
            Ja, ich weiß. Danke!
            Nur NULL habe ich auch nicht mehr zu Verfügung... .

            Also ich habe jetzt gekniffen, und meine Abfragen neu verteilt.
            Eine Extratraabfrage bei O(N²) war mir performancemässig zu teuer.

            Mit anderen Worten - Ich habe gekniffen...

            Trotzdem thx all

            Blaster
            Yuppi, endlich Elite ...

            Kommentar


            • #7
              @goth:
              Ja, ich weiß. Danke!
              Nur NULL habe ich auch nicht mehr zu Verfügung... .

              Also ich habe jetzt gekniffen, und meine Abfragen neu verteilt.
              Eine Extratraabfrage bei O(N²) war mir performancemässig zu teuer.

              Mit anderen Worten - Ich habe gekniffen...

              Trotzdem thx all

              Blaster

              Ups ... Berni ..tzztzz.
              Yuppi, endlich Elite ...

              Kommentar

              Lädt...
              X