Announcement

Collapse
No announcement yet.

Division mit Subquery die Multi Rows enthält

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Division mit Subquery die Multi Rows enthält

    Hallo Community,
    ich habe eine verzwickte Aufgabe:

    Ich habe eine Tablle Tour, in ihr sind einmal eine Fahrernummer enthalten eine Tournummer(primary auto inc) und eine fahrbewertung zwischen 1 und 6.

    Ich möchte nun den Fahrer haben mit der besten Fahrbewertung, das Problem mehrere fahrer haben mehrere Touren.

    So mit dieser Query bekomme ich nun ja schonmal die Summe der Fahrbewerungen heraus
    Code:
    Select sum(Fahrbewertung) from Tour Group by MitarbeiterNr
    Mit dieser Query bekomme ich die Anzahl der getätigten Fahrten heraus
    Code:
    (Select COUNT(MitarbeiterNr) from Tour Group by MitarbeiterNr)
    Jetzt müsste man nur wie in der Schule beim Notendurchschnitt
    Summe(Fahrbewertungen)/Anzahl(Fahrten).

    So dies würde aber nur für einen Fahrer gelten. Wenn ich dies für alle Fahrer realisieren kann, brauche ich nur noch über Select Max() den fahrer raussuchen der die beste Bewertung hat.

    Aber genau das ist mein Problem. Ich bekomme keine Liste erstellt die mir die Durchschnittsbewertungen aller Fahrer ausgibt, da mir
    Code:
    Select sum(Fahrbewertung) from Tour Group by MitarbeiterNr / (Select COUNT(MitarbeiterNr) from Tour Group by MitarbeiterNr)
    die Subquery mehrere Tuppel zurück liefert.

    Wie könnte ich diese Berechnung am besten Anstellen?
    Ich hatte erst überlegt es in in einer Procedure ausrechnen zu lassen, so das ich für jeden Fahrer einzeln sein Durchschnitt berechne, nur das ich dann n-Variablen benötigen würde um die ergebnisse zu sichern. Da ich nicht die Anzahl der Fahrer kenne. Unter C# oder einer anderen Hochsprache wäre dies ja kein Problem, nur welche Lösung wäre für SQL am geeignetsten?
    Zuletzt editiert von Vertax; 16.01.2011, 00:14.

  • #2
    Es gibt hier kein [sql}-Tag!

    Code:
    Select sum(Fahrbewertung) from Tour Group by MitarbeiterNr / (Select COUNT(MitarbeiterNr) from Tour Group by MitarbeiterNr)
    Das war wohl etwas ohm unüberlegt.

    Code:
    Select sum(Fahrbewertung) / COUNT(MitarbeiterNr) from Tour Group by MitarbeiterNr
    Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

    Comment


    • #3
      Originally posted by dibo33 View Post
      Es gibt hier kein [sql}-Tag!

      Das war wohl etwas ohm unüberlegt.

      Code:
      Select sum(Fahrbewertung) / COUNT(MitarbeiterNr) from Tour Group by MitarbeiterNr
      Das dies nicht funktioniert ist mir durchaus bewusst, ich kann ja nicht durch mehrere Tuppel teilen. Deshalb hatte ich auch geschrieben das mir die Abfrage ja mehrere Tupples zurück lieferen würde und deshalb so nicht möglich wäre.

      Ich wollte nämlich wissen wie ich dies realisieren kann und nicht wie es nicht funktioniert was mir selbst schon kla ist.

      Comment


      • #4
        D.h du willst den gesamten Durchschnitt und nicht den jeweils der Fahrer? dann lasse das GROUP BY weg.
        Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

        Comment


        • #5
          Ich will schon alle Durchschnitswert von allen Fahren und davon dann das Maximum bestimmen.
          Da liegt halt mein Problem, ich weis nicht ob ich eventuell meine Datenbank Model umbauen sollte oder ob es doch vielleicht möglich wäre. Da mir momentan keine Lösung dafür einfällt.

          Es geht halt darum den Fahrer mit den besten Fahr noten auszuwerten um diesen dafür zu belohnen. Aber halt nicht pro Tour sonder für alle getätigten Touren.

          Bsp.:
          Code:
          Select sum(Fahrbewertung) where MitarbeiterNr = 1 / COUNT(MitarbeiterNr) from Tour where MitarbeiterNr = 1
          Wenn jetzt Mitarbeiter Nr.1 2Touren getätigt hätte mit einer Bewertung von Tour1=6 und Tour2=6
          Dann wäre seine Gesamtbewertung (6+6=12 , á 2 touren) 12/2= 6
          Dies möchte ich nun halt für alle Fahrer haben und den Fahrer auswählen der die beste Bewertung hat.

          Comment


          • #6
            Code:
            Select sum(Fahrbewertung) / COUNT(MitarbeiterNr) as note
            from Tour 
            Group by MitarbeiterNr
            ORDER BY note # DESC wenn 6 beste Note ASC wenn 1 beste note
            LIMIT 1
            Edit: du brauchst ja noch die MAnr

            Code:
            Select MitarbeiterNr, sum(Fahrbewertung) / COUNT(MitarbeiterNr) as note
            from Tour 
            Group by MitarbeiterNr
            ORDER BY note # DESC wenn 6 beste Note ASC wenn 1 beste note
            LIMIT 1
            Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

            Comment


            • #7
              Danke schön das scheint die Richtige lösung zu sein )

              Comment


              • #8
                Noch einfacher wäre es wenn du die Funktion AVG() nutzt
                Code:
                SELECT MitarbeiterNr, AVG(Fahrbewertung) note
                FROM Tour 
                GROUP BY MitarbeiterNr
                ORDER BY note # DESC wenn 6 beste Note ASC wenn 1 beste note
                LIMIT 1
                Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

                Comment


                • #9
                  Ic habe aber da noch ein kleines Problem ich müsste das ganze über Max realisieren da wenn zwei mitarbeiter die selbe Bewertung hat bekomme ich nur einen heraus.

                  Comment


                  • #10
                    Sofern 6 die beste Note ist

                    Code:
                    SELECT MitarbeiterNr, AVG(Fahrbewertung) note
                    FROM Tour 
                    GROUP BY MitarbeiterNr
                    HAVING note = (
                        SELECT MAX(note)
                        FROM (
                            SELECT AVG(Fahrbewertung) note
                            FROM Tour
                            GROUP BY MitarbeiterNr
                        ) x
                    )
                    Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

                    Comment


                    • #11
                      Hallo,
                      Originally posted by dibo33 View Post
                      Es gibt hier kein [sql}-Tag!
                      doch, in gewisser Weise schon: Formatierung von SQL in Beiträgen

                      Gruß Falk
                      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                      Comment

                      Working...
                      X