2016-08-04 26 views
2

Ich habe eine Abfrage, die Sportvölker beste Zeiten im Rennsport usw. findet. Meine Abfrage filtert im Grunde alle Rennen abgesehen von persönlichen Bestzeiten.Anzahl der Personen in meiner Abfrage zählen

ich das% der Rennen zeigen, will sie über andere Menschen in den Rennen beendet haben

ich den Kopf erhalten kann nicht um, wie dies so zu tun, Hoffnung, jemand helfen könnte, das ist mein Code:

SELECT tblSourceData.Athlete, Max(tblSourceData.Swim) AS MaxOfSwim, Max(tblSourceData.Bike) AS MaxOfBike, Max(tblSourceData.Run) AS MaxOfRun, Count(tblSourceData.Athlete) AS EventsCompleted 
    FROM tblSourceData 
    WHERE (((tblSourceData.Gender)="f")) 
    GROUP BY tblSourceData.Athlete 
    HAVING (((Count(tblSourceData.Athlete))>=5)); 

Meine Zeilen in meinem Tisch sind:

Athlete 
Swim 
Run 
Bike 
Date 
Gender 

-------- MEHR INFO VON Kommentare hinzugefügt -----------

Meine Anfrage zur Zeit zeigt so etwas wie dies als Beispiel:

Name  Swim  Bike  Run  CompletedEvents  % 
Dave  43:22 11:23  32:34   46 
John  43:23 31:24  11:43   12 

Ich möchte für alle Athleten des Prozentsatz des durchschnittlichen wissen, wer Rennen

im Voraus Danke

+0

und was ist ein Rennen? Jede Zeile in deinem Tisch ist ein Rennen? Sie müssen einige weitere Informationen geben, damit wir Ihnen helfen können, –

+0

"die% der Rennen, die sie über andere Leute in den Rennen abgeschlossen haben" .Können Sie mehr Informationen dazu auch geben ??? –

+0

Bitte fügen Sie einige Beispieldaten und erwartete Ausgabe hinzu – Saurabh

Antwort

0

Versuchen abgeschlossen dies:

SELECT tblSourceData.Athlete, 
(SELECT Max(tblSourceData.Swim) from tblSourceData) AS MaxOfSwim, 
(SELECT Max(tblSourceData.Bike) from tblSourceData) AS MaxOfBike, 
(SELECT Max(tblSourceData.Run) from tblSourceData) AS MaxOfRun, 
Count(tblSourceData.Athlete) AS EventsCompleted 
FROM tblSourceData 
WHERE (((tblSourceData.Gender)="f")) 
GROUP BY tblSourceData.Athlete 
HAVING (((Count(tblSourceData.Athlete))>=5)); 

Hoffe es hilft!

+0

Würde es nicht die Last und die Ausführungszeit erhöhen? – Saurabh

+0

Das hat nicht funktioniert – dmorgan20

0

Wenn Sie wollen, ist der Prozentsatz aller abgeschlossenen Rennen aller Athleten aus allen Rennen müssen Sie nur SUM() verwenden, um alle abgeschlossenen Rennen zusammenzufassen und dann den Prozentsatz jedes Benutzers zu berechnen. Ich könnte es nicht testen, aber so etwas sollte Arbeit:

SELECT tblSourceData.Athlete as Athlete, 
     Max(tblSourceData.Swim) AS MaxOfSwim, 
     Max(tblSourceData.Bike) AS MaxOfBike, 
     Max(tblSourceData.Run) AS MaxOfRun, 
     Count(tblSourceData.Athlete) AS EventsCompleted, 
     ROUND((100*Count(tblSourceData.Athlete)/(SELECT SUM(b.eventsCompleted) FROM (  
      SELECT COUNT(tblSourceData.Athlete) AS EventsCompleted FROM tblSourceData 
      WHERE tblSourceData.Gender="f" 
      GROUP BY tblSourceData.Athlete 
      HAVING Count(tblSourceData.Athlete)>=5 
     ) AS b)),2) AS `percentage` 
     FROM tblSourceData 
     WHERE tblSourceData.Gender="f" 
     GROUP BY tblSourceData.Athlete 
     HAVING Count(tblSourceData.Athlete)>=5 
+0

leider funktioniert das nicht – dmorgan20

+0

@david Ich aktualisierte meine Abfrage sollte es jetzt in Ordnung sein.Sie können es erneut versuchen –

Verwandte Themen